2

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

4

1 回答 1

-2

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

// 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

于 2010-09-20T20:25:45.380 回答