【问题标题】:Configuring dynamic height for Table Cell为表格单元格配置动态高度
【发布时间】:2012-08-01 02:23:23
【问题描述】:

我对这个方法 tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 有一些滞后问题。

我的场景如下: 我在每个单元格中都有一些文本视图,因此我需要遍历单元格以获取最后一个文本视图的 yPosition 及其内容大小,以便配置该特定单元格的高度。

为了做到这一点,我使用了 UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];在 heightForRowAtIndexPath 方法中。因此,它会调用 cellForRow 并重新配置我的单元格的内容并返回给我。

但是,这就是出现滞后问题的地方。由于 heightForRow 将在实际的 cellForRow 之前调用,这意味着我将调用 cellForRow 两次。一个在 heightForRow 中用于获取单元格,另一个用于实际的 cellForRow 实现。

请就我需要做什么来避免这个滞后问题提出建议。谢谢。

【问题讨论】:

    标签: iphone objective-c ios5


    【解决方案1】:

    您永远不应该自己调用表视图委托方法。你可以告诉表视图重新加载它的数据:[tableview reloadData];

    【讨论】:

    • reloadData 在这种情况下没有帮助,因为高度尚未配置。感谢您的回复,非常感谢
    【解决方案2】:

    您应该在 -tableView:heightForRowAtIndexPath: 方法中计算行高,方法是调用 -[NSString sizeWithFont:forWidth:lineBreakMode:] 或其他类似的 API,并向其添加任何填充高度。

    无论您在-tableView:heightForRowAtIndexPath: 中执行的速度有多快,与tableView.rowHeight 相比仍然存在惩罚。

    【讨论】:

    • 这个单元格中有几个文本视图,所以你建议我应该从每个文本视图中获取文本并将它们作为字符串附加在一起,然后使用 -[NSString sizeWithFont:forWidth:lineBreakMode:] 来获取单元格的高度?如果我错了纠正我。谢谢。
    • 如果文本不经常修改,你甚至可以缓存这些高度。
    • 是的,这就是我现在正在做的事情,有一个数组来存储每个单元格的所有高度。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多