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 单元格高度

UICollectionView 自定义布局动画故障,在 performBatchUpdates 上具有自我调整单元格大小

UICollectionView 动态单元格高度(Pinterest 布局)