动画UICollectionView单元格大小更改并重新定位周围的单元格

Jus*_*tin 15 objective-c uicollectionview uicollectionviewcell uicollectionviewlayout ios7

在此输入图像描述

目标:

为单元格高度的变化设置动画并重新定位周围的单元格.

场景:

集合视图中的某些单元格会加载远程图像.最初,这些单元格的大小是静态的,并显示了活动指示符.加载图像后,将其添加到其单元格中,并更改单元格的高度以适合照片.

笔记:

我用它来动画细胞的框架变化animateWithDuration.这样可以正常工作,除了增加的单元尺寸使其与下面的单元重叠.collectionView.collectionViewLayout invalidateLayout在调整目标单元格大小并更新返回的大小后,我盲目地尝试调用但sizeForItemAtIndexPath没有成功.

有什么建议?谢谢!

示例代码:

https://github.com/juzzin/ResizeUICollectionViewCell/blob/master/ResizeUICollectionViewCell/FLOViewController.m

在此输入图像描述

Dan*_*iel 15

基本上你需要做三个步骤

1.invalidate collectionViewLayout

2.执行批量更新:

 ...
 //invalidate layout
[collectionView performBatchUpdates:^{
    // make your cell at indexPath return a new size
} completion:^(BOOL finished) {

}];
Run Code Online (Sandbox Code Playgroud)

3.返回新的尺寸 sizeForItemAtIndexpath

  • 谢谢Daniel.感谢您快速简洁的回复.我发布了一些示例代码,并了解到动画完成后performBatchUpdates会调用invalidateLayout.如果在performBatchUpdates之前显式调用,则会跳过动画,因为单元属性会立即更新.所以,我相信你可以跳过第一步. (6认同)