我有一个带有几个不同部分的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 找到某种解决方法.感谢您的帮助.

推荐答案

iOS 7.1已经修复了这个漏洞.

在iOS 7.0中,似乎没有办法解决这个问题.调用[self.tableView endUpdates]会导致对表中的每个单元格调用heightForRowAtIndexPath:.

然而,在iOS 7.1中,调用[self.tableView endUpdates]会导致调用heightForRowAtIndexPath:个可见单元格,调用estimatedHeightForRowAtIndexPath:个不可见单元格.

Objective-c相关问答推荐

将 NSInteger 转换为 NSIndexpath

uipageviewcontroller 类在设置多个视图控制器时崩溃

将未知数量的行添加到静态单元UITableView

Asihttprequest 61 错误

从 Storyboard 实例化视图控制器与创建新实例

NSView 的边界与框架

适用于 ios 的 360° 全景库

如何调整 UIModalPresentationFormSheet 的大小?

找不到名为ProjectName的目标

如何从 Xcode4 生成 UML 图

iOS 在设备旋转时更改自动布局约束

如何转储存储在 Objective-C 对象(NSArray 或 NSDictionary)中的数据

如何编写 OS X Finder 插件

如何在 NSSet 或 NSArray 中搜索具有特定属性的特定值的对象?

自定义 colored颜色 我的 UIActivityIndi​​catorView

NSAssert vs assert :您使用哪个,何时使用?

交换 NSMutableArray 中的元素

架构 i386 clang 的重复符号

如何阻止 NSNotification 中的观察者调用两次?

无法更改 UILabel 文本 colored颜色