加载 tableView 后如何更新 UITableViewCell 高度

Posted

技术标签:

【中文标题】加载 tableView 后如何更新 UITableViewCell 高度【英文标题】:How to update a UITableViewCell height after tableView is loaded 【发布时间】:2014-05-06 06:49:58 【问题描述】:

自定义UITableViewCell包含一个从web异步加载的图片,它的大小/aspectRatio事先是未知的,所以无法在tableView:heightForRowAtIndexPath:中返回准确的单元格高度。

我可以在委托方法中返回一个估计的高度,但需要在加载图像时通知tableView单元格高度的变化。我该怎么做?

    reloadData 太重了,考虑到每次加载图片时,整个 tableView 都会刷新。 reloadRowsAtIndexPaths:withRowAnimation: 也不好。由于单元格本身不会改变,只需更新其高度即可。

【问题讨论】:

-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath return 100; 你必须强制重新加载整个表格视图或单元格 您必须重新加载该单元格以获取新高度 【参考方案1】:

希望您除了[self.tableView reloadData]; 之外别无选择,无论如何它不会重新加载所有数据 - 它只是重新加载可见单元格。

【讨论】:

【参考方案2】:

重新加载可见的表格单元格 - 是最好的。否则,每次您需要完全重新加载表格视图时,它会将您放在第一个单元格上。然后以编程方式,您应该向下滚动特定访问的单元格。这很痛苦。也不是一个好的用户界面。

    [YourTableView reloadRowsAtIndexPaths:[YourTableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationAutomatic];

仅重新加载下载完成单元格

    [YourTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:YourImageCompletelyDownloadRow inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];

【讨论】:

【参考方案3】:

您可以通过调用非常轻松地重新加载表格

[tableview reloadData];

来自this 回复:

UITableView 类在单元格即将出现在屏幕上之前从不加载单元格,即使您调用了 reloadData。

因此只会重新加载可见的单元格。

【讨论】:

因此,只会重新加载可见单元格,而不是整个 tableView。

以上是关于加载 tableView 后如何更新 UITableViewCell 高度的主要内容,如果未能解决你的问题,请参考以下文章