首页 > 解决方案 > 实现无限滚动时(滚动到底部时UITableView中的分页结果):reloadData还是insertRows?

问题描述

在 a 中实现无限滚动时UITableView(当用户滚动到底部时将附加结果加载到数据源),应该通过插入行来更新表reloadData()还是通过插入行(可能通过批量更新)来更新表?

我现在正在使用reloadData()它,它工作得很好,但我不确定幕后发生了什么以及它的效率如何。使用reloadData(),新行被插入到表格的底部并且表格不会跳转(所以对用户来说这是一个无缝更新),但是 UIKit 是否会不必要地重新加载整个表格(我们只是看不到它)?因为只有在用户滚动到底部时才会将新行添加到表格中,这可能意味着表格上方有大量单元格并且不在视图中。我知道这些单元格无论如何都不在视图层次结构中(因为表格会在用户滚动时添加和删除单元格),但是reloadData()无论这种机制如何,它都能有效地更新分页块吗?

标签: iosswiftuitableview

解决方案


由于实际上任何时候屏幕上的单元格都很少,因此 reloadData 并不比 insert 慢得多。真正的区别在于动画。reload 只是添加没有动画的新单元格,因为 insert 将允许您为单元格设置动画。更新的方法(iOS 13+)是不调用任何一种方法,而是使用UITableViewdiffableDatasource,它将自动执行更新您指定的动画(这更类似于 RxCocoa 和 IGListKitWork)。


推荐阅读