滚动到 UICollectionView 中的下一个单元格

Posted

技术标签:

【中文标题】滚动到 UICollectionView 中的下一个单元格【英文标题】:Scrolling to next cell in UICollectionView 【发布时间】:2014-04-30 03:02:53 【问题描述】:

我在容器视图中有一个 UICollectionView。它的大小使我一次只能看到一个单元格。我已禁用垂直滚动,因此只发生水平滚动。

在我水平滚动单元格的地方,一切都很好。这种滚动的缺点是我可以滚动并到达我看到两个单元格的一半部分之间有间隙的位置。

我想要实现的是一次只显示一个单元格,并且从不显示两个半单元格。所以滚动应该一次将我带到下一个单元格。

希望这是有道理的。

如果有人尝试过或可以帮助我实现相同的目标,请告诉我。谢谢。

【问题讨论】:

【参考方案1】:

您可以通过设置pagingEnabled = YES 一次滚动一个单元格。或者对于常规滚动,您可以通过覆盖targetContentOffsetForProposedContentOffset:withScrollingVelocity:UICollectionViewLayout 来调整减速结束的位置。使用后一种方法时,您通常会执行以下操作:

    确定到proposedContentOffset 的最近索引路径。如果您的单元格之间没有间隙,您可以使用[UICollectionView indexPathForItemAtPoint:]。否则,您可能需要以某种方式检查您的布局,以确定您想要滚动到哪个索引路径。 通过获取索引路径的布局属性来确定要滚动到的索引路径的框架 确定将给定帧定位到所需位置的内容偏移量。

【讨论】:

【参考方案2】:

确保单元格之间的填充也设置为零。启用分页将在多个视图边界处停止。

    // Set up flow layout
            var flowLayout:UICollectionViewFlowLayout = UICollectionViewFlowLayout();
            flowLayout.minimumInteritemSpacing = 0
            flowLayout.minimumLineSpacing = 0

            collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: flowLayout)

            collectionView!.pagingEnabled = true

【讨论】:

【参考方案3】:

在这里查看我的答案:ScrollView or CollectionView?

听起来您启用了分页,但页面大小与您的单元格大小加上单元格左右的插入不匹配。

【讨论】:

【参考方案4】:

斯威夫特 5:

collectionView.isPagingEnabled = true

【讨论】:

这已经是贾斯汀瓦莱利给出的答案的一部分。 这是 Swift 5 的。你也不需要设置流布局。

以上是关于滚动到 UICollectionView 中的下一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 滚动到下一项

如何使用 UICollectionView 滚动到下一项

UIScrollView 或 UICollectionView 中的自定义滚动行为

UICollectionView 水平滚动与静态焦点项目

滚动库中的下一个和上一个按钮中的错误

使用 UICollectionView 的建议