我如何在滚动到顶部时加载更多数据而又不丢失UITableView的当前偏移量?

这是我要实现的目标:

这是整个数据集:

第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行*
第9行
第10行
第11行
第12行
第13行
第14行
第15行

现在,假设用户加载了以粗体标记的行,并且偏移量位于row 8,如果用户向上滚动并到达row 7,我想加载并插入1到5的行,而不会从row 7跳转。请记住,用户可能正在滚动,因此当数据到达手机时,它位于row 6,因此我无法将其跳转回row 7,而是保持滚动流畅自然(这就是在向下滚动时加载更多数据时的情况,这样就可以重新加载数据,而表视图不会从行之间跳转。

顺便说一句,以偏移量表示contentOffsetUITableView属性。

感谢您的帮助,我非常感谢!

最佳答案

在更新数据时,需要首先获取tableView的当前偏移量。然后,您可以将添加的数据的高度添加到偏移量中,并设置tableView的偏移量,如下所示:

func updateWithContentOffsset(data: [String]) {
    guard let tableView = tableView else {
        return
    }
    let currentOffset = tableView.contentOffset
    let yOffset = CGFloat(data.count) * tableView.rowHeight // MAKE SURE YOU SET THE ROW HEIGHT OTHERWISE IT WILL BE ZERO!!!
    let newOffset = CGPoint(x: currentOffset.x, y: currentOffset.y + yOffset)
    tableView.reloadData()
    tableView.setContentOffset(newOffset, animated: false)
}

您还可以查看我创建的gist。只需打开一个新的iOS Playground并复制粘贴要点即可。

您唯一需要了解的就是确保您知道要添加到偏移量的行高。

10-05 21:21
查看更多