2012-08-03 80 views
0

我对这个方法tableView有一些滞后问题:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath。配置表格单元的动态高度

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

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

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

请注意我需要做什么以避免这个滞后问题。谢谢。

回答

0

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

+0

reloadData在这种情况下没有帮助,因为高度尚未配置。谢谢你的回复,真的很感谢它 – 2012-08-03 04:14:05

1

你应该在你的-tableView:heightForRowAtIndexPath:方法计算行的高度,通过调用-[NSString sizeWithFont:forWidth:lineBreakMode:]或其他一些API的一致好评,并添加任何填充的高度,以它。

然而,尽快在-tableView:heightForRowAtIndexPath:中做到这一点,与tableView.rowHeight相比,仍然存在惩罚。

+0

这个单元格内有几个textview,所以你建议我应该从每个textview中获取文本并将它们作为字符串附加在一起,然后使用 - [NSString sizeWithFont:forWidth:lineBreakMode:]获得细胞的高度?如我错了请纠正我。谢谢。 – 2012-08-03 04:13:15

+0

如果文本没有经常修改,您甚至可以缓存这些高度。 – ZhangChn 2012-08-06 05:41:45

+0

是的即时即时在做什么,现在有一个数组来存储每个单元格的所有高度。谢谢 – 2012-08-07 05:20:46