抱歉 - 没有内置方法可以反转这些方法或类似方法。原因之一是表格视图可能出于多种原因想要知道行的高度,并非所有原因都包括显示单元格 --tableView:heightForRowAtIndexPath:
可能会被多次调用,或者-tableView:cellForRowAtIndexPath:
在调用高度法。
您可以做的是找到另一种方法来提前计算适当的高度,将其缓存,并依赖于-tableView:heightForRowAtIndexPath:
. 我已经设法通过构建一个“虚拟” UITableViewCell 实例来做类似的事情,将其排除在正常的重用队列之外,并将其仅用于布局和高度确定目的。这样的解决方案将是这样的:
- 得到
-tableView:heightForRowAtIndexPath:
。
- 在高度缓存中查找索引路径。如果你有一个值,返回它。
- 否则,请使用您的虚拟单元格来布置将出现在该索引路径上的内容。测量单元格的高度并将其缓存。
- 可能会重复步骤 1-3 几次,具体取决于
-tableView:heightForRowAtIndexPath:
调用的次数。
- 得到
-tableView:cellForRowAtIndexPath:
。
- 从正常的重用队列中取出一个单元格,填充它,布置它,然后返回它。(您可以选择验证其高度是否与您预先计算的高度相匹配,以便表格视图的行为符合您的预期。)
根据您的单元格内容和用例中“lay it out”短语的复杂性,当您计算前几个高度或用户快速滚动表格视图时,这可能会导致合理的性能损失。但是,随着您的缓存升温,随着应用程序继续运行,您应该计算越来越少的高度。
最后一点:请记住,对于具有默认高度的单元格(可能会或可能不会出现在您的表格中),您可以通过返回提前退出tableView.rowHeight
,而不是每次出现时都计算默认高度。这可以在一定程度上减轻上述方法的计算负担。