加载 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 行?