动画 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 上具有自我调整单元格大小

UICollectionView 单元格展开动画问题

UICollectionView 单元格没有动画运动

UICollectionView 插入动画单元格立即出现,后面跟着实际的动画单元格