滚动到 UICollectionView 中启用分页的页面

Posted

技术标签:

【中文标题】滚动到 UICollectionView 中启用分页的页面【英文标题】:Scroll to a page in UICollectionView with paging enabled 【发布时间】:2017-02-21 10:19:58 【问题描述】:

我正在尝试将一个数字(页码)从视图控制器传递到另一个视图控制器,该控制器具有 UICollectionViewpaging enabled 选项。我的代码确实滚动到一个页面,但内容没有居中,这是我的代码:

override func viewWillAppear(_ animated: Bool) 
    let currentPage = 4
    let indexPath = NSIndexPath(row: currentPage , section: 0) as IndexPath
    self.collectionView.scrollToItem(at: indexPath, at: .right, animated: true)

结果:

我需要什么:

解决方案:

collectionView.setContentOffset(CGPoint(x:  CGFloat(currentPage) * collectionView.bounds.size.width , y: 0), animated: false)

已编辑

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 

        return CGSize(width: 321 , height: 321)

    

【问题讨论】:

【参考方案1】:

您可以尝试像这样滚动:

collectionView.setContentOffset(CGPoint(x:  currentPage * itemSize, y: 0), animated: false)

其中itemSize 是集合视图中项目的大小。此外,如果您在每个项目之间有间距,则在计算 x 时也应添加该间距@

编辑:您需要使用 itemSize.width 并且如果您需要将 currentPage 转换为 CGFloat 像这样 CGFloat(currentPage)

【讨论】:

您需要使用itemSize.width,如果您需要将currentPage 转换为CGFloat,就像这样CGFloat(currentPage) 谢谢,但我提到了 collectionView.bounds.size.width 而不是 itemSize ,现在它可以正常工作了。 我又发现了一个问题!这行代码只适用于 iPhone 4.7" 屏幕!!!!为什么?故事板中选择的设备是 iPhone 7 但我添加了约束。那为什么会发生这种情况? 只有在你的项目有一个恒定的大小时才会像你说的那样工作......如果你希望项目在所有设备上都是全宽的,你需要在UICollectionViewDelegateFlowLayout函数中创建它所以适合您的项目的尺寸应该是这样的return CGSize(width: view.bounds.width, height: 150),这将具有动态宽度(取决于屏幕尺寸)和静态高度 你不应该对width使用常量

以上是关于滚动到 UICollectionView 中启用分页的页面的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 在启用分页的情况下不会滚动完整的 320 点

启用分页和每页多个单元格时奇怪的 UICollectionView 行为

带有分页的 UICollectionView

UICollectionView 不自动滚动

UICollectionView - 滚动到下一页

UICollectionView,单元格选择不起作用,单元格滚动正常