2

我有一个ViewView和一个ViewView。 ImageView位于屏幕左上角,大小为(150,250).CollectionView为全屏幕。 collectionView的单元格里面有标签。动态更改UICollectionViewCell宽度

当单元格靠近imageView时,它应该有较小的宽度。当单元格低于imageView时,它应该是全角。这也应该在滚动时起作用,所以单元格的大小应该动态变化。所以,我需要做一个自定义布局。我认为,“layoutAttributesForElementsInRect:”是一个答案。但如何使某些矩形的单元属性发生变化?或者我正在寻找错误的方向? 预先感谢您。

example

回答

5

我认为你正在寻找invalidateLayout方法,你可以在你的UICollectionViewcollectionViewLayout物业打电话。此方法重新生成您的布局,在您的情况下也意味着调用-collectionView: layout: sizeForItemAtIndexPath:,这是反映您所需项目大小的正确位置。 Jirune指出了如何计算它们的正确方向。

使用invalidateLayout can be found here的示例。另请参阅关于该方法的UICollectionViewLayout文档:

使当前布局无效并触发布局更新。

讨论:

您可以在任何时间更新布局信息调用此方法。 此方法使收集视图本身的布局无效,并且 立即返回。因此,您可以从 多次调用此方法的同一代码块,而不会触发多个布局更新。 实际布局更新在下一个视图布局更新周期中发生。

+2

谢谢你的回答。我想,应该有一个与例子的链接?这不是 – krosh

+1

,这正是我所需要的。我在scrollViewDidScroll里面使用invalidateLayout方法:并且工作。谢谢。 – krosh

+0

另外值得注意的是,collectionView:layout:sizeForItemAtIndexPath:是UICollectionViewDelegateFlowLayout协议中的一个方法。 –