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

我正在尝试使用具有多种单元格类型的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)

使用tableView的[tableView beginUpdates][tableView endUpdates]将解决此问题。 有关更多信息,请参阅此答案 。

像这样在你的UITableViewCell设置委托

 var textDidChanges: (() -> Void)? = nil func textViewDidChange(_ textView: UITextView) { textDidChanges?() } 

和你的tableView cellForRowAt

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

如何在UITextView的基础上制作一个内置UITextView的UITableViewCell,动态调整其高度?