ios autolayout 嵌套 View 布局的高度不对
大家讲道理
大家讲道理 2017-04-17 16:11:21
[iOS讨论组]

刚学iOS,我想实现一个类似短信(微信)界面的对话框,结构如图:

如下,我把输入框UITextViewUIButton嵌入到了一个UIView中,UIView中设置的约束都是普通的如Top/Bottom/Leading/Trailing对齐。

TableView没有设置高度,UIView也没有设置高度,但UITextView设置了初始高度45。

当希望实现一个基础功能:
当UITextView的输入内容大于一行时,把UITextView的高度调整,以显示多行输入文本。但这个基本的功能怎么都搞不对。代码如下:

func textViewDidChange(textView: UITextView) {
    if textView != inputTextView{
        return
    }
    
    
    var textViewFrame = textView.frame
    let sizeDiff = textView.contentSize.height - textViewFrame.height
    
    var chatViewFrame = chatView.frame
    chatViewFrame.origin.y -= sizeDiff
    //chatViewFrame.size.height += sizeDiff
    chatView.frame = chatViewFrame
    
    textViewFrame.size = textView.contentSize
    textView.frame = textViewFrame
    
    var tableViewFrame = tableView.frame
    tableViewFrame.size.height -= sizeDiff
    tableView.frame = tableViewFrame
}

在debug视图里,虽然文本框变高了,但看到的UIView高度没有变化,所以button跟着变高(我只设置了button和UIView底部约束)。


但是,如果把注释掉的代码加回来(//chatViewFrame.size.height += sizeDiff),发现UIView的高度变了,但是UITextView的高度设置没有用了。


被这个问题搞得头痛,望高手指导。

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
阿神

你既然使用了Autolayout,就不应该直接去设置view.frame,你可以给UITextView设置这样的布局,上下左右像你之前做的那样都设置好边距,高度设置为45那个约束删掉,新增两个高度约束:height >= 45(确保至少显示一行的高度), heigh <=135 (确保高度不超过135,具体数值需要自己调整)

ringa_lee

1 首先textview里是有个scrollview的 它通过它来显示文字的 哪么可以获得它的contentsize

2 如果要让包裹textview外面的view也增大 是需要设置外面的view的宽高和位置 可以改变constraint
也可以在外面view弄出一个类 覆写它的intrinsiccontentsize

iOS有问必答社区为你回答
426981364(扣群)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号