【问题标题】:Dynamic Table height. Redundant calculation of row height?动态表高度。行高的冗余计算?
【发布时间】:2011-03-12 10:09:35
【问题描述】:

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

【问题讨论】:

    标签: iphone uitableview height row-height


    【解决方案1】:

    您不必编写两次计算代码。您可以在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

    【讨论】:

    • 这不起作用,因为 heightForRowAtIndexPath 在 cellForRowAtIndexPath 之前被调用。另外,在“heightFor”方法中调用“cellFor”方法会创建一个无限循环。我在这里提出了同样的问题并就我提出的解决方案提出了建议:stackoverflow.com/questions/4823197/…
    猜你喜欢
    • 2011-11-02
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    相关资源
    最近更新 更多