首页 > ios autolayout 嵌套 View 布局的高度不对

ios autolayout 嵌套 View 布局的高度不对

刚学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的高度设置没有用了。


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


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


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

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

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

【热门文章】
【热门文章】