我有一个静态表,里面有四个部分。第三部分包含一个UITextView,如果用户输入多行,我想调整大小。我设法让这个工作,但我调整大小的textView透支了最后一个表格部分。
我发现很多关于此的旧文章有不同的解决方案,但对于我的静态表格,没有一个对我有用。
我所做的是让我的控制器实现UITextViewDelegate并编写了这个方法:
func textViewDidChange(textView: UITextView) {
var frame = textView.frame
frame.size.height = textView.contentSize.height
textView.frame = frame
tableView?.beginUpdates()
tableView?.endUpdates()
}
有些文章建议编写一个高度约束,然后将其放在上面的方法中:
let size = reminderNameTextInput.bounds.size
let newSize = reminderNameTextInput.sizeThatFits(CGSize(width: size.width, height: CGFloat.max))
// Resize the cell only when cell's size is changed
if size.height != newSize.height {
UIView.setAnimationsEnabled(false)
tableView?.beginUpdates()
tableView?.endUpdates()
}
无论如何,结果是一样的:textView增长并透支下一个tableviewsection。
我该如何解决这个问题?
更新1: 让我告诉你我的意思是“过度生长”它下面的部分:
更新2 如果我在heightForRowAtIndexPath中重新计算单元格高度,会发生这种情况。它完全透过它下面的部分而不是将它们向下移动:
答案 0 :(得分:1)
以下代码适用于与您相同的用例,将其放在textViewDidChange中:
let size = textView.bounds.size
let newSize = textView.sizeThatFits(CGSize(width: size.width, height: CGFloat.max))
var estimatedHeight = newSize.height > MINIMUM_HEIGHT ? newSize.height : MINIMUM_HEIGHT
textView.frame = CGRectMake(0, 0, textView.frame.width, estimatedHeight)
UIView.setAnimationsEnabled(false)
tableView?.beginUpdates()
tableView?.endUpdates()
UIView.setAnimationsEnabled(true)
答案 1 :(得分:0)