UICollectionView 单元格布局超出了集合视图的范围
Posted
技术标签:
【中文标题】UICollectionView 单元格布局超出了集合视图的范围【英文标题】:UICollectionView cell layout is out of the collection view's bounds 【发布时间】:2013-05-02 20:26:18 【问题描述】:我有一个 UICollectionView,它使用 Flow Layout 来布置它的单元格。它是垂直滚动的。
它填充 320x480 的屏幕并显示始终为 96*96 的自定义 UICollectionViewCell - 大小在 Interface Builder 中设置,并且委托未实现基于每个项目设置项目大小的方法。
左右各有10px的插页,最小间距设置为6px。
因此会发生每条水平线 3 个单元格。
= 320。
我遇到的问题是有时它会在一条线上放置 4 个单元格! 第 4 个单元格大部分不在屏幕上。然后它只在下一行放置 2 个单元来进行补偿。流式布局的重点在于它是一种断行布局,不应该把任何东西放在屏幕外!
我附上了一张图片:
请注意,在第二行,第四个项目几乎不在屏幕上。
我真的不知道是什么原因造成的。单元格动态填充数据,但它们的大小是恒定的。所有其他行上的单元格都非常合适,因此没有理由在某些行上会发生这种情况。
每次更新集合视图时,都会在不同的地方发生此错误。 IE。它可能发生在第 2 行,然后一旦发生更新,它可能会发生在第 10 行,依此类推。
集合视图正在由计时器更新。计时器本质上调用了一个处理一些数据的函数,然后使用 dispatch_async(到主队列上)更新包含支持数据的数组并调用 [collectionView reloadData]。所以我没有从除主线程之外的任何线程更新集合视图。后备数组仅在主队列和该函数中更新;不是来自其他任何地方。
请有人给我一些关于可能出错的建议。
谢谢
【问题讨论】:
【参考方案1】:我已通过在 scrollViewDidScroll:
委托方法中添加 [_collectionViewFlowLayout invalidateLayout]
来修复它。
https://github.com/f33chobits/FSCalendar/issues/21
【讨论】:
以上是关于UICollectionView 单元格布局超出了集合视图的范围的主要内容,如果未能解决你的问题,请参考以下文章
表格视图单元格中的 uicollectionview 出现错误:索引超出范围,为啥?
UICollectionView中删除一个单元格后刷新单元格布局
仅通过自动布局确定 UICollectionView 单元格高度
UICollectionView 自定义布局动画故障,在 performBatchUpdates 上具有自我调整单元格大小