我正在尝试根据一些动态内容设置 UITableViewCell 的高度。我知道您可以通过视图控制器中的 heightForRowAtIndexPath 委托方法“设置”高度,但是……我不能这样做!
问题是在调用 cellForRowAtIndexPath 之前不知道单元格的高度,并且在调用cellForRowAtIndexPath之前调用 heightForRowAtIndexPath 。
因此,我需要以某种方式颠倒调用这两种方法的顺序,或者找到另一种设置单元格高度的方法。
有任何想法吗?
我正在尝试根据一些动态内容设置 UITableViewCell 的高度。我知道您可以通过视图控制器中的 heightForRowAtIndexPath 委托方法“设置”高度,但是……我不能这样做!
问题是在调用 cellForRowAtIndexPath 之前不知道单元格的高度,并且在调用cellForRowAtIndexPath之前调用 heightForRowAtIndexPath 。
因此,我需要以某种方式颠倒调用这两种方法的顺序,或者找到另一种设置单元格高度的方法。
有任何想法吗?
抱歉 - 没有内置方法可以反转这些方法或类似方法。原因之一是表格视图可能出于多种原因想要知道行的高度,并非所有原因都包括显示单元格 --tableView:heightForRowAtIndexPath:可能会被多次调用,或者-tableView:cellForRowAtIndexPath:在调用高度法。
您可以做的是找到另一种方法来提前计算适当的高度,将其缓存,并依赖于-tableView:heightForRowAtIndexPath:. 我已经设法通过构建一个“虚拟” UITableViewCell 实例来做类似的事情,将其排除在正常的重用队列之外,并将其仅用于布局和高度确定目的。这样的解决方案将是这样的:
-tableView:heightForRowAtIndexPath:。-tableView:heightForRowAtIndexPath:调用的次数。-tableView:cellForRowAtIndexPath:。根据您的单元格内容和用例中“lay it out”短语的复杂性,当您计算前几个高度或用户快速滚动表格视图时,这可能会导致合理的性能损失。但是,随着您的缓存升温,随着应用程序继续运行,您应该计算越来越少的高度。
最后一点:请记住,对于具有默认高度的单元格(可能会或可能不会出现在您的表格中),您可以通过返回提前退出tableView.rowHeight,而不是每次出现时都计算默认高度。这可以在一定程度上减轻上述方法的计算负担。