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

 maggieting0334_990 发布于 2022-10-30 22:51

刚学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 个回答
  • 1 首先textview里是有个scrollview的 它通过它来显示文字的 哪么可以获得它的contentsize

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

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

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

    2022-10-31 22:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有