【问题标题】:UITableView pagination: inserting new cells while scrolling weird behaviorUITableView 分页:滚动奇怪行为时插入新单元格
【发布时间】:2018-01-30 10:13:41
【问题描述】:

我有这个表格视图,当它到达最后一个单元格时,它会在 WillDisplayCell 委托方法上加​​载新数据。问题是当用户向下滚动并调用此方法时,插入新单元格会使 tableView 向上滚动以显示新添加的单元格,这会产生非常奇怪的动画。

现在,我可以简单地调用tableView.reloadData() 来避免这种情况,但是这种方法会重新加载所有内容。我只需要重新加载新的不可见单元格,因为我在 WillDisplayCell 方法中为它们提供了自定义动画。

有什么建议可以用动画单元格实现无缝的UITableView 分页吗?

【问题讨论】:

标签: ios swift uitableview pagination infinite-scroll


【解决方案1】:

我最近在尝试实现类似 TikTok 的滚动体验时遇到了这个问题。秘诀就是实施

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat

并返回单元格高度,即使 tableview 高度有一个已知的固定数字

我不知道估计的单元格高度会影响行插入,但似乎毫无疑问是真的。

(这是我为 iOS13+ 应用解决问题的经验)

【讨论】:

    【解决方案2】:

    此解决方案适用于我,但它确实取决于您的用户界面。您的情况可能还有更多:

    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 秒?
    猜你喜欢
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多