UITableView 在插入更多行时滚动到顶部

Posted

技术标签:

【中文标题】UITableView 在插入更多行时滚动到顶部【英文标题】:UITableView scrolls to top when inserting more rows 【发布时间】:2016-01-23 03:26:52 【问题描述】:

在我的代码中,我覆盖了tableView:willDisplayCell,当显示最后一行时,我开始加载更多数据。当这些数据进来时,我调用insertRowsAtIndexPaths 来添加行。

这通常有效(tableview 的滚动位置不会改变),但我注意到如果我过度滚动而不松手(滚动超过 tableview 的末尾),当@987654323 时 tableview 将跳到顶部@ 在数据加载时被调用。

我将UITableViewAutomaticDimension/Autolayout 用于我的单元格高度,因为每个单元格具有不同的高度,具体取决于它们包含的数据。我怎样才能避免这个问题?理想情况下,如果数据加载并且 tableview 过度滚动,一旦数据进入,滚动位置将保持在过度滚动。

【问题讨论】:

我从 UITableViewAutomaticDimension 切换到使用虚拟单元计算每行高度,并且不再出现此问题。仍然想知道是否可以解决 UITableViewAutomaticDimension 的问题。 【参考方案1】:

您可以在底部单元格indexpath 上创建一个引用,然后在导致它返回顶部的任何函数中调用

[self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionNone animated:YES];

SWIFT 3

    self.tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.none, animated: true)

【讨论】:

如果用户滚动到行的中间,这不会导致表格视图对齐到行的开头吗? 我以为只有当用户一直滚动到底部时才会发生这种情况? 如果是这样,当新行加载时,表格视图仍然会捕捉到上一个最后一行,对吗?我试图获得的行为是表格视图停留在过度滚动位置,因为新数据加载到以前是过度滚动区域的空间中。作为参考,打开 Facebook 应用程序并滚动到提要的底部;如果你过度滚动表格视图将保持在帖子加载时的位置。 哦,好吧,我明白你的意思了。也许您可以在 tableView 加载时暂停 UI 线程,并在新数据准备好显示后取消暂停...

以上是关于UITableView 在插入更多行时滚动到顶部的主要内容,如果未能解决你的问题,请参考以下文章

当 UIView 的 needsUpdateConstraints 被调用时,UITableview 滚动到顶部[关闭]

UITableView deleterows 滚动到顶部

在 UITableView 中滚动到顶部后,CAGradientLayer 位置错误。迅速

带有标题视图的 UITableView 不滚动到顶部

UITableview 在重新加载时滚动到顶部太高?

再次点击当前标签栏时如何在 UITableView 中滚动到顶部?