动态表高度。行高的冗余计算?

时间:2010-07-06 16:37:30

标签: iphone uitableview height row-height

在表格视图中,我使用具有动态高度的自定义UITableViewCells。布局算法很复杂,因为不仅有动态文本块,还有不同高度的图像。当调用适当的heightForRowAtIndexPath时,teble视图单元格尚未渲染。我必须计算两次身高吗?一次是针对heightForRowAtIndexPath还是针对cellForRowAtIndexPath?或者有一个模式如何组合它?

1 个答案:

答案 0 :(得分:-2)

您不必两次编写计算代码。您可以在cellForRowAtIndexPath:中完成所有艰苦工作,然后使用结果获取高度方法中的高度。例如,您的高度方法可能如下所示(使用一些简短的名称来帮助它适合):

// I usually use descriptive variable names, but they won't fit on one line here.
- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)i {
  UITableViewCell *cell = [self tableView:t cellForRowAtIndexPath:i];
  return cell.frame.size.height;
}

此代码的不好之处在于,在首次显示表(操作系统执行此操作)之前,将为表中的每一行调用此方法,这可能在您的应用中显示为滞后。如果你的高度随着时间的推移而变化(每行),那么最好有一些更快的方法来计算高度,这是更多的工作。但是,如果您的行高随着时间的推移总是相同(每行),那么您可以只缓存高度。

引用一些可用于此的缓存代码: http://bynomial.com/blog/?p=90