动画 UICollectionView 单元格大小更改和重新定位周围的单元格
Posted
技术标签:
【中文标题】动画 UICollectionView 单元格大小更改和重新定位周围的单元格【英文标题】:Animate UICollectionView cell size change and reposition surrounding cells 【发布时间】:2014-04-18 07:26:33 【问题描述】:目标:
动画单元格高度的变化并重新定位周围的单元格。
场景:
集合视图中的某些单元格会加载远程图像。最初,这些单元格被静态调整大小并显示活动指示器。加载图像后,将其添加到其单元格中,并更改单元格的高度以适合照片。
注意事项:
我正在使用animateWithDuration
为单元格的帧更改设置动画。这工作正常,除了增加的单元格大小使其与下面的单元格重叠。在调整目标单元格大小并更新sizeForItemAtIndexPath
返回的大小后,我盲目地尝试调用collectionView.collectionViewLayout invalidateLayout
,但没有成功。
有什么建议吗?谢谢!
示例代码:
https://github.com/juzzin/ResizeUICollectionViewCell/blob/master/ResizeUICollectionViewCell/FLOViewController.m
【问题讨论】:
【参考方案1】:基本上你需要做三个步骤
1.使collectionViewLayout失效
2.执行批量更新:
...
//invalidate layout
[collectionView performBatchUpdates:^
// make your cell at indexPath return a new size
completion:^(BOOL finished)
];
3.在sizeForItemAtIndexpath
返回新尺寸
【讨论】:
谢谢丹尼尔。感谢您快速简洁的回复。我发布了一些示例代码并了解到在动画完成后 performBatchUpdates 调用 invalidateLayout 。如果在 performBatchUpdates 之前显式调用,则会跳过动画,因为单元格属性会立即更新。所以,我相信你可以跳过第一步。 我知道我不应该说谢谢,但我已经为此苦苦挣扎了好几天,而且解决方案非常简单!谢谢!!也感谢 @Justin 的 Github 链接,非常有帮助。以上是关于动画 UICollectionView 单元格大小更改和重新定位周围的单元格的主要内容,如果未能解决你的问题,请参考以下文章
当集合视图大小发生变化时,我需要帮助为 UICollectionView 单元格大小设置动画
通过切换布局触发的动画 UICollectionView 单元格调整大小
UICollectionView 自定义布局动画故障,在 performBatchUpdates 上具有自我调整单元格大小