【问题标题】:Infinite scrolling for scrolling up a tableView?无限滚动以向上滚动 tableView?
【发布时间】:2025-11-25 05:45:01
【问题描述】:

我有一个聊天消息应用程序,它会从最早到最新加载我的消息,然后自动滚动到底部,以便用户看到最新消息。

我只加载 25 条消息,然后当用户滚动到顶部时,我想上传接下来的 25 条消息。事实证明这非常棘手,最终陷入无限循环。

这就是我正在做的事情:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    guard indexPath.row == 1 else { return }
    fetchNextMessages(with: lastReference: lastMessage.reference)
}

在表格完成滚动到底部之前,它开始获取下一组错误。所以我尝试了这个:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    guard scrollView.contentOffset.y <= 0 else { return }
    fetchNextMessages(with: lastReference: lastMessage.reference)
}

但是,同样的问题。有没有更好的处理方法?

【问题讨论】:

  • 所以当它们滚动到顶部时,您会尝试加载更多消息吗?我会检查 scrollViewDidScroll 内的 contentOffset。检查 contentOffset.y - 如果它大于 10 或其他值,则加载新消息并将它们插入表格视图的顶部。

标签: ios swift uitableview uikit


【解决方案1】:

你应该注意这个方法被多次调用了,你应该在用新数据重新加载表格后创建fetchingNow = false,此外当你加载新内容时不要滚动到最旧的内容并离开用户向上滚动查看剩余的

 func scrollViewDidScroll(_ scrollView: UIScrollView) {
    guard scrollView.contentOffset.y <= 0 else { return }

    if(!fetchingNow)
    {
        fetchNextMessages(with: lastReference: lastMessage.reference)
    }

}

【讨论】: