我有这个tableview,它在Debug
委托方法到达最后一个单元格时加载新数据。问题是当用户向下滚动并调用此方法时,插入新单元格会使tableView向上滚动以显示新添加的单元格,并产生非常奇怪的动画。
现在,我可以简单地调用WillDisplayCell
来避免这种情况,但这种方法会重新加载所有内容。我需要重新加载新的非可见单元格,因为我在tableView.reloadData()
方法中为它们提供了自定义动画。
是否有任何关于实现动画单元格无缝WillDisplayCell
分页的建议?
答案 0 :(得分:0)
此解决方案适用于我,但它实际上取决于您的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)
}
}
}
在这里我正在嘲笑数据获取,但可能你必须实现保护以在数据仍在加载时阻止任何调用。
当我测试时,表视图中没有奇怪的滚动。
答案 1 :(得分:0)
我最近在尝试实现类似TikTok的滚动体验时遇到了这个问题。秘诀在于实施
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
并返回单元格高度,即使tableview高度具有已知的固定数字
我不知道估计的单元格高度会影响行插入,但这似乎是毫无疑问的。
(这是我的经验,解决了iOS13 +应用程序的问题)