在我的cell.xib中,我有一个标签,其所有方面都有约束.我已将该标签设置为lines = 0和line-break = word wrap.然后,我对我的TableView执行此操作:
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 100.0
Run Code Online (Sandbox Code Playgroud)
一切都很好,我的UITableViewCell是自动高度.如果文本很长,那么我的tableView会智能地计算大小.
问题是 - 一旦内容在单元格中发生变化,如何告诉我的UITableView"重新计算"大小?
我的单元格可以调用它的委托,在这个委托中,我希望TableView重新绘制高度.
现在,我的细胞中的内容不断变化,但细胞高度永远不会改变.
Sul*_*han 35
有记录的方法可以做到这一点.见UITableView.beginUpdates() 文档:
您还可以使用此方法,然后使用endUpdates方法为行高度的更改设置动画,而无需重新加载单元格.
所以,正确的解决方案是:
tableView.beginUpdates()
tableView.endUpdates()
Run Code Online (Sandbox Code Playgroud)
另请注意,有一个未记录的功能 - 您也可以在此处为更新动画添加完成处理程序:
tableView.beginUpdates()
CATransaction.setCompletionBlock {
// this will be called when the update animation ends
}
tableView.endUpdates()
Run Code Online (Sandbox Code Playgroud)
然而,轻描淡写,它没有记录(但它的工作原理是因为动画UITableView使用a CATransaction).
我发现检查高度的最佳方法是在完成任何文本更改后调用,按顺序:
self.tableView.beginUpdates()
self.tableView.endUpdates()
Run Code Online (Sandbox Code Playgroud)
这会导致tableView检查所有可见单元格的高度,这将导致根据需要进行更改.