加载 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 高度的主要内容,如果未能解决你的问题,请参考以下文章

在 reloadSections 后 TableView 部分变为隐藏

(自动)在 tabbar1 中更新数组后,在 Tableview(tabbar2) 上重新加载数据(无需更改 tabbars)

如何在 Firebase 中删除 tableview 项目后删除它们

如何在 swift 中仅为唯一值更新 TableView 行?

加载 tableview 时应用程序崩溃并显示错误“无效更新:无效的节数”。

NSLayoutConstraints 在第一次 tableview 演示后更新