滚动到 UICollectionView 中启用分页的页面
Posted
技术标签:
【中文标题】滚动到 UICollectionView 中启用分页的页面【英文标题】:Scroll to a page in UICollectionView with paging enabled 【发布时间】:2017-02-21 10:19:58 【问题描述】:我正在尝试将一个数字(页码)从视图控制器传递到另一个视图控制器,该控制器具有 UICollectionView
和 paging 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 点