我如何在滚动到顶部时加载更多数据而又不丢失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
,而是保持滚动流畅自然(这就是在向下滚动时加载更多数据时的情况,这样就可以重新加载数据,而表视图不会从行之间跳转。
顺便说一句,以偏移量表示contentOffset
的UITableView
属性。
感谢您的帮助,我非常感谢!
最佳答案
在更新数据时,需要首先获取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并复制粘贴要点即可。
您唯一需要了解的就是确保您知道要添加到偏移量的行高。