启用分页和每页多个单元格时奇怪的 UICollectionView 行为
Posted
技术标签:
【中文标题】启用分页和每页多个单元格时奇怪的 UICollectionView 行为【英文标题】:Strange UICollectionView behavior when paging enabled and multiple cells per page 【发布时间】:2014-09-09 00:19:11 【问题描述】:我有一个 UICollectionView,水平滚动,paging=YES
,每页显示三个单元格。如果它的数据源有四个项目,collectionView 将有“两个页面”。
奇怪的是,在点击单元格时,collectionView 总是快速回到contentOffset(0,0)
。在此处观看视频:https://www.dropbox.com/s/vlqt3mh7bwyeiw7/collectionviewbug.mov?dl=0
什么都不做,检查我的 git repo 上的代码:https://github.com/opfeffer/collectionviewbug
有人知道导致此问题的原因以及如何预防吗?谢谢!!
【问题讨论】:
【参考方案1】:发生这种情况是因为假设您的页面大小为 3,但如果有 4 个元素,您将显示第一页的 2/3 和预期第二页的 1/3。当您在单元格中点击时,集合会移动以完整地显示当时向用户显示更多内容的页面。
例如,如果您使用 7 个元素并在 7 号上按集合转到 4 号,您可以检查这一点。
避免这种行为的方法是始终拥有“完整页面”,因此如果您没有足够的元素来填充页面,则无论如何都需要告诉内容视图更大。因此,您需要使用类似于以下内容的子类 UICOllectionViewFlowLayout:
(CGSize)collectionViewContentSize CGSize contentSize = [超级collectionViewContentSize]; // 这假设您的集合视图控制器中有一个公共方法来计算任何给定数量元素的页数 NSInteger pages = [(YourCollectionViewController *) self.collectionView.delegate pagesNumber]; // 然后你返回 n 倍宽度的页数和 1 倍高度的大小 return CGSizeMake(CGRectGetWidth(self.collectionView.frame) * pages, contentSize.height);【讨论】:
以上是关于启用分页和每页多个单元格时奇怪的 UICollectionView 行为的主要内容,如果未能解决你的问题,请参考以下文章