【问题标题】:UICollectionView Scroll to next itemUICollectionView 滚动到下一项
【发布时间】: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)
   }

【问题讨论】:

    标签: ios swift uiscrollview cgpoint scroll-paging


    【解决方案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 点,依此类推。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 2022-01-19
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多