UICollectionView 滚动到下一项

Posted

技术标签:

【中文标题】UICollectionView 滚动到下一项【英文标题】:UICollectionView Scroll to next item 【发布时间】:2016-05-26 13:08:54 【问题描述】:

这个想法是用 UIScrollView 替换 PageController,UIScrollView 应该只滚动到下一个/上一个项目并停止。我找到了一些解决方案,但我只知道我必须使用 targetContentOffsetForProposedContentOffset,但不知道我应该返回什么 CGPoint 以及即使用户高速滚动也如何停止下一个项目。

    override func targetContentOffsetForProposedContentOffset(proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint 
    return CGPoint(x: 0, y: 0)
   

【问题讨论】:

【参考方案1】:

使用下面的代码。您的问题将得到解决。

YourScrollView.pagingEnabled = YES;

【讨论】:

【参考方案2】:

使用 UIScrollView,您可以启用分页。该属性称为 pagingEnabled。这意味着如果您正确设置内容大小,它是否会捕捉到全宽(或高度)。

即如果您想要 2 个页面并且宽度为 100,高度为 200。您将内容大小设置为 CGSize 宽度为 200,高度为 200。滚动视图将处理对齐和分页。

如果你想有一个函数去像 goToPage(2) 这样的页面。然后你只需要调用 UIScrollView 中的 scrollRectToVisible 方法,其 CGRect 为 (pageNumber * scrollView.width (或页面宽度), 1 height)

看起来您使用的是 Swift,因此您的实现可能会有所不同。

【讨论】:

我想补充一下,因为我忘记了你只想移动到下一个项目是你有几个选项。您可以停止与滚动视图的用户交互并在主视图上添加手势,这将触发进入下一页/上一页的方法。或者你可以做的是创建 3 个页面并显示中间。动画完成后,将当前视图移动到中间并加载下一个或上一个视图。有效地进行无限分页。 topCollectionView.pagingEnabled = true; topCollectionView.contentSize = CGSize(宽度:UIScreen.mainScreen().bounds.width,高度:300.0)。我已经添加了这个,分页有效,但不是在整个单元格上而是在一些随机点上停止,所以我可以看到上一个和下一个单元格 UIScreen.mainScreen().bounds.width 仅表示有 1 页。作为测试,尝试 UIScreen.mainScreen().bounds.width*5 并查看它是否正在分页。这应该为您指明正确的方向 作为指南,您不需要使用 UIScreen.mainScreen().bounds.width 来获取宽度。在定位和使用不同的屏幕尺寸时,这可能会导致问题。 使用 CollectionView 自动布局到底层滚动视图可能有什么问题吗?它仍然首先向右滚动大约 200 点,然后向我显示整个页面,然后再次向右滚动大约 300 点,依此类推。

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

UICollectionView - 滚动到下一页

Objective C uiCollectionView 滚动和加载图像让它感觉滞后

使用 UICollectionView 的建议

UICollectionView 垂直滚动最后一项

UICollectionView 滚动到没有动画的最后一项

滚动到最后一项时 UICollectionView 崩溃