ios - 快速无限向上滚动 collectionView

标签 ios swift uicollectionview

几乎每个人都可以找到当collectionView滚动到底部时无限collectionView加载更多数据的例子,但也许有人知道如何从下到上无限滚动collectionView?

就像聊天记录在用户向上滚动时加载更多。

例如。

我有一个包含 100000 个项目和一个条件的列表。应用程序应向用户显示从 9500 到 9600 的项目,并且当用户向上滚动时,应用程序应在 collectionView 的开头添加到从 9400 到 9500 的 collectionView 项目,当用户向下滚动时 - 应用程序应添加到 collectionView collectionView等的结束

我用谷歌搜索并尝试了底部无限 collectionView 的反向逻辑,但没有成功。 CollectionView 只是向上滚动到列表中的第一项。

有什么想法或建议吗?

最佳答案

您描述的结果是预期的。由于您滚动到顶部,内容偏移量为零。当您添加新项目时,旧项目会被推到底部。它不会以相反的方式发生;当您滚动到底部并在其下方添加项目时,滚动位置保持不变。

老实说,这全都与视角有关。实际上,在两种情况下(或没有),位置都保持不变,但取决于您如何看待它。当您在底部附加项目时,从顶部看位置应保持相同(这是默认情况)。但是,当您在顶部添加项目时,位置与底部保持相同。

所以你的解决方案是,当你在底部添加项目时,你应该从顶部更改滚动:

let distanceFromTop = scrollView.contentOffset.y - 0.0;
// Reload data here
scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: 0.0 + distanceFromTop)

这基本上意味着“什么都不做”。

但是当您在顶部附加项目时,您需要从底部开始计算:

let distanceFromBottom = scrollView.contentSize.height - scrollView.contentOffset.y;
// Reload data here
scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: scrollView.contentSize.height - distanceFromBottom)

您应该注意,您也可以横向执行此操作。在右侧添加项目将再次变得透明。但是在左边添加它们应该是这样的:

let distanceFromRight = scrollView.contentSize.width - scrollView.contentOffset.x;
// Reload data here
scrollView.contentOffset = CGPoint(x: scrollView.contentSize.width - distanceFromRight, y: scrollView.contentOffset.y)

我正在使用 scrollView 因为它的每个子类都会发生同样的情况。相同的逻辑可以应用于 TableView 或 Collection View 。

此处的另一个注意事项是,估计的行高或类似功能在未正确完成时可能会导致异常。在这种情况下,您可能需要更巧妙地计算偏移量。

关于ios - 快速无限向上滚动 collectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58929838/

相关文章:

ios - 在 iOS 5.1 应用程序中;为什么我看不到异常?

ios - 从 UIColor 中提取 RGB 值

ios - 从模态视图返回时,向已打开的 View 写入一些内容

swift - 使用指针解析检索 PFObject

ios - UITableView 的 tableViewHeader 和 tableViewCells 重叠,直到调用 reloadData

ios - SwiftyJson : Looping an array inside an array

iOS Storyboard 有条件地显示 View

ios - 去除导航栏下的细线

objective-c - Objective-C - UICollectionView 左侧/右侧的渐变渐变

ios - UICollectionViewController 页脚/页眉未显示