Ios UITableView分页:滚动时插入新单元格
我有一个tableview,当它到达最后一个单元格时,它会在Ios UITableView分页:滚动时插入新单元格,ios,swift,uitableview,pagination,infinite-scroll,Ios,Swift,Uitableview,Pagination,Infinite Scroll,我有一个tableview,当它到达最后一个单元格时,它会在WillDisplayCelldelegate方法上加载新数据。问题是当用户向下滚动并调用此方法时,插入新单元格会使tableView向上滚动以显示新添加的单元格,这会产生非常奇怪的动画 现在,我可以简单地调用tableView.reloadData()来避免这种情况,但是这个方法会重新加载所有内容。我只需要重新加载新的不可见单元格,因为我将在WillDisplayCell方法中为它们提供自定义动画 有没有关于使用动画单元格实现无缝UI
WillDisplayCell
delegate方法上加载新数据。问题是当用户向下滚动并调用此方法时,插入新单元格会使tableView向上滚动以显示新添加的单元格,这会产生非常奇怪的动画
现在,我可以简单地调用tableView.reloadData()
来避免这种情况,但是这个方法会重新加载所有内容。我只需要重新加载新的不可见单元格,因为我将在WillDisplayCell
方法中为它们提供自定义动画
有没有关于使用动画单元格实现无缝
UITableView
分页的建议?此解决方案适合我,但它确实取决于您的UI。在你的情况下,可能还有其他原因:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row == data.count - 5 {
let time = DispatchWallTime.now() + DispatchTimeInterval.seconds(1)
DispatchQueue.main.asyncAfter(wallDeadline: time) {
let indexes = 33...55
self.data.append(contentsOf: indexes)
let dataCount = self.data.count
let paths:[IndexPath] = ((dataCount-indexes.count)...(dataCount-1)).flatMap({ index -> IndexPath in
return IndexPath(row: index, section: 0)
})
self.tableView.insertRows(at: paths, with: .right)
}
}
}
我在这里模拟数据获取,但可能您必须实施保护,在数据仍在加载时阻止任何调用
当我测试时,表视图中没有奇怪的滚动。最近在尝试实现类似TikTok的滚动体验时,我自己也遇到了这个问题。秘密在于实施
func tableView(\tableView:UITableView,estimatedHeightForRowAt indexath:indexPath)->CGFloat
并返回单元格高度,即使tableview高度有一个已知的固定数字
我不知道估计的单元格高度会影响行插入,但这似乎毫无疑问是正确的
(这是我解决iOS13+应用程序问题的经验)单元格被添加到数据集的末尾,对吗,而不是在顶部的某个地方?@LachezarTodorov是的。那@LalKrishna呢?我就是这么做的。为什么要将插入延迟1秒?