在键入文本时动态更改单元格的高度,并重新加载包含的tableview以进行调整大小

时间:2018-02-18 12:22:50

标签: ios swift uitableview size

我正在尝试使用具有多种单元格类型的UITableView。 我的一个单元格需要动态更改高度,同时在其中键入文本。 这是改变单元格高度的代码(在单元格的类中),这很好用:

func textViewDidChange(_ textView: UITextView)
{
    var newFrame:CGRect = noteTextView.frame
    newFrame.size.height = noteTextView.contentSize.height
    noteTextView.frame = newFrame
    self.frame = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, width: self.frame.width, height: noteTextView.contentSize.height)
}

但细胞覆盖着他下面的细胞。 在父tableView成员上添加这些行也没有帮助:

mParentTableView.setNeedsLayout()
mParentTableView.layoutIfNeeded()

知道如何告诉tableView重新计算其包含的单元格大小吗?

(XCode 9,Swift 4)

2 个答案:

答案 0 :(得分:2)

在您的UITableViewCell上设置委托

var textDidChanges: (() -> Void)? = nil

func textViewDidChange(_ textView: UITextView) {
    textDidChanges?()
}

和您的tableView cellForRowAt

cell.textDidChanges = {
    self.tableView.beginUpdates()
    self.tableView.endUpdates()
} 

How to make a UITableViewCell with a UITextView inside, that dynamically adjust its height, on the basis of the UITextView?

答案 1 :(得分:1)

使用tableView' [tableView beginUpdates][tableView endUpdates]将解决此问题。有关详细信息,请参阅this answer