我有一个 UITableView 有几个不同的部分。一个部分包含将随着用户在 UITextView 中键入文本而调整大小的单元格。另一部分包含呈现 HTML 内容的单元格,计算高度相对昂贵。
现在,当用户输入 UITextView 时,为了让表格视图更新单元格的高度,我调用
[self.tableView beginUpdates];
[self.tableView endUpdates];
但是,这会导致表格重新计算表格中每个单元格的高度,而我实际上只需要更新输入的单个单元格。不仅如此,它不是使用 重新计算估计的高度tableView:estimatedHeightForRowAtIndexPath:
,而是调用tableView:heightForRowAtIndexPath:
每个单元格,即使是那些未显示的单元格。
有没有办法让表格视图只更新单个单元格的高度,而不做所有这些不必要的工作?
更新
我仍在寻找解决方案。正如建议的那样,我尝试过使用reloadRowsAtIndexPaths:
,但看起来这不起作用。即使只调用reloadRowsAtIndexPaths:
单行,也会导致heightForRowAtIndexPath:
每一行都被调用,即使cellForRowAtIndexPath:
只会为您请求的行调用。事实上,每次插入、删除或重新加载行时,似乎heightForRowAtIndexPath:
都会为表格单元格中的每一行调用。
我还尝试在willDisplayCell:forRowAtIndexPath:
单元格出现之前放入代码来计算高度。为了使它起作用,我需要在计算后强制表格视图重新请求行的高度。不幸的是,调用[self.tableView beginUpdates]; [self.tableView endUpdates];
fromwillDisplayCell:forRowAtIndexPath:
会导致 UITableView 内部代码深处出现索引越界异常。我猜他们不希望我们这样做。
我不禁觉得这是 SDK 中的一个错误,响应[self.tableView endUpdates]
它不需要不estimatedHeightForRowAtIndexPath:
可见的单元格,但我仍在尝试寻找某种解决方法。任何帮助表示赞赏。