我有一个带有几个不同部分的UITableView.其中一个部分包含当用户在UITextView中键入文本时将调整大小的单元格.另一部分包含呈现HTML内容的单元格,对于这些单元格,计算高度的成本相对较高.
现在,当用户输入UITextView时,为了让表视图更新单元格的高度,我调用
[self.tableView beginUpdates];
[self.tableView endUpdates];
然而,这会导致表格重新计算表格中every个单元格的高度,而我实际上只需要更新输入的single个单元格.不仅如此,它没有使用tableView:estimatedHeightForRowAtIndexPath:
重新计算估计高度,而是 for each 单元格调用tableView:heightForRowAtIndexPath:
,即使那些没有显示的单元格也是如此.
有没有办法让表视图只更新单个单元格的高度,而不做所有这些不必要的工作?
Update
我还在寻找解决办法.正如建议的那样,我已经try 过使用reloadRowsAtIndexPaths:
,但这似乎不起作用.即使只使用一行调用reloadRowsAtIndexPaths:
,也会导致每行调用heightForRowAtIndexPath:
,即使只对您请求的行调用cellForRowAtIndexPath:
.事实上,看起来每当插入、删除或重新加载一行时,表单元格中的每一行都会调用heightForRowAtIndexPath:
.
我还try 在willDisplayCell:forRowAtIndexPath:
中输入代码,在单元格即将出现之前计算高度.为了使其工作,我需要在计算后强制表格视图重新请求行的高度.不幸的是,从willDisplayCell:forRowAtIndexPath:
调用[self.tableView beginUpdates]; [self.tableView endUpdates];
会在UtableView的内部代码深处导致索引越界异常.我猜他们不希望我们这么做.
我忍不住觉得这是SDK中的一个bug,在响应[self.tableView endUpdates]
时,对于不可见的单元,它不会调用estimatedHeightForRowAtIndexPath:
,但我仍在try 找到某种解决方法.感谢您的帮助.