刚学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,具体数值需要自己调整)