UICollectionViewCell 宽度的动态变化
Posted
技术标签:
【中文标题】UICollectionViewCell 宽度的动态变化【英文标题】:dynamic change of UICollectionViewCell width 【发布时间】:2013-10-29 09:20:15 【问题描述】:我有一个带有 imageView 和 collectionView 的视图。 ImageView 位于屏幕左上角,大小为 (150,250)。CollectionView 为全屏。 collectionView 的单元格里面有标签。
当单元格靠近 imageView 时,它的宽度应该更小。当单元格低于 imageView 时,它应该是全宽的。这也应该在滚动时起作用,因此单元格的大小应该动态变化。所以,我需要做一个自定义布局。我想,“layoutAttributesForElementsInRect:”就是一个答案。但是如何使某个矩形中的单元格属性发生变化?还是我看错了方向? 提前谢谢你。
【问题讨论】:
【参考方案1】:我认为您正在寻找可以调用UICollectionView
的collectionViewLayout
属性的invalidateLayout
方法。此方法会重新生成您的布局,在您的情况下也意味着调用-collectionView: layout: sizeForItemAtIndexPath:
,这是反映您所需项目大小的正确位置。 Jirune 指出了如何计算它们的正确方向。
invalidateLayout can be found here 的用法示例。另请参阅有关该方法的 UICollectionViewLayout
文档:
使当前布局无效并触发布局更新。
讨论:
您可以随时调用此方法来更新布局信息。 此方法使集合视图本身的布局无效,并且 马上返回。因此,您可以从 相同的代码块而不触发多个布局更新。这 实际的布局更新发生在下一个视图布局更新周期。
【讨论】:
感谢您的回答。我想,应该有一个例子的链接?它不存在 这正是我所需要的。我在 scrollViewDidScroll: 中使用 invalidateLayout 方法,这很有效。谢谢。 另外值得注意的是collectionView:layout:sizeForItemAtIndexPath:是UICollectionViewDelegateFlowLayout协议中的一个方法。以上是关于UICollectionViewCell 宽度的动态变化的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionViewCell 在 UICollectionViewReusableView 宽度之后开始
以编程方式将 UICollectionViewCell 宽度设置为 UICollectionView 宽度
单击按钮 UICollectionViewCell 宽度和高度更改