刚学iOS,我想实现一个类似短信(微信)界面的对话框,结构如图:
如下,我把输入框UITextView
和UIButton
嵌入到了一个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(扣群)