Ios UITableView分页:滚动时插入新单元格

Ios UITableView分页:滚动时插入新单元格,ios,swift,uitableview,pagination,infinite-scroll,Ios,Swift,Uitableview,Pagination,Infinite Scroll,我有一个tableview,当它到达最后一个单元格时,它会在WillDisplayCelldelegate方法上加载新数据。问题是当用户向下滚动并调用此方法时,插入新单元格会使tableView向上滚动以显示新添加的单元格,这会产生非常奇怪的动画 现在,我可以简单地调用tableView.reloadData()来避免这种情况,但是这个方法会重新加载所有内容。我只需要重新加载新的不可见单元格,因为我将在WillDisplayCell方法中为它们提供自定义动画 有没有关于使用动画单元格实现无缝UI

我有一个tableview,当它到达最后一个单元格时,它会在
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秒?