如何记住表格视图中的确切滚动位置

Posted

技术标签:

【中文标题】如何记住表格视图中的确切滚动位置【英文标题】:How to remember exact scroll position in table view 【发布时间】:2019-06-30 21:34:38 【问题描述】:

在我的 VC 中,我有表格视图。我想记住确切的滚动位置,这样当用户回到这个视图时,我可以滚动到相同的位置。我的要求是当用户返回查看时我必须重新加载数据。

我尝试过使用内容偏移方法,但是这个偏移量超出了桌面高度,所以这个解决方案对我不起作用。

我试过保存 indexPath 并滚动到这个位置,但这并没有给出确切的位置。我必须指定不是确切位置的中间、顶部或底部。

那么我们如何记住准确的滚动位置并在重新加载表中的数据后滚动到该位置?

self.tableView.scrollToRow(at: scrollToSavedIndexPath, at: UITableView.ScrollPosition.middle, animated: false)

【问题讨论】:

如下所述,contentOffset 是执行此操作的正确方法。如果它不起作用,那么您的单元格高度或 contentInset.top 在您重新加载时可能正在改变 - 或者您在重新加载之前重新应用 contentOffset tableViewCell 的高度是怎么设置的?这些是动态的吗?如果是,那可能是 contentOffset 更改的问题。尝试为 tableViewCells 提供一个恒定的高度,然后看看它是否有效。然后我们可以讨论如何解决这个特定问题。 单元格高度在 IB 中都是固定的。 【参考方案1】:

问题:我刚刚看到您提到 contentOffset 不适合您。您可以通过每次打印出 contentOffset 值来再次尝试该方法吗?这是了解偏移方法为何不适合您的一个很好的起点。

使用以下保存滚动位置:

 let offset = tableView.contentOffset

然后设置滚动位置如下:

tableView.setContentOffset(offset, animated: false)

【讨论】:

虽然这是正确答案,但 OP 说 contentOffset 对他不起作用,所以肯定有其他事情发生。 我有 ViewController 里面我有顶部的搜索栏,当点击搜索图标时显示/隐藏。在搜索栏下方,我有细分。下面的部分我有 TableView。 该解决方案可能/将起作用。问题在于获取数据似乎变得太复杂了,我无法解决它。 Tx 寻求帮助。

以上是关于如何记住表格视图中的确切滚动位置的主要内容,如果未能解决你的问题,请参考以下文章

视图中的滚动视图和滚动视图中的表格视图;我如何引用它?

如何记住分页刷新滚动位置

如何通过表格视图单元格中的 url 预览元数据?

记住 QML 元素中的滚动位置

表格视图中的滚动视图分页

如何使搜索栏不与表格视图一起滚动? [复制]