我有一个使用标准UICollectionViewFlowLayout
展示单个垂直列单元格的UICollectionViewController
。当单击单元格时,我尝试创建一种展开/折叠动画。我使用以下代码来实现此目的:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath (NSIndexPath *)indexPath
{
[self.feedManager setCurrentlySelectedCellIndex:indexPath.item];
[self.collectionView performBatchUpdates:nil completion:nil];
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
//Return the size of each cell to draw
CGSize cellSize = (CGSize) { .width = 320, .height = [self.feedManager heightForCellAtIndexPath:indexPath] };
return cellSize;
}
我的管理对象上的“selectedCellIndex”属性告诉数据模型在heightForCellAtIndexpath中返回一个展开或折叠的大小。[self.collectionView performBatchUpdates:nil completion:nil];
然后 performBatchUpdates:completiong:
方法可以很好地动画化这个大小的变化。但是!当动画发生时,扩展单元格可能会导致屏幕底部的部分可见单元格离开屏幕。
如果是这种情况,然后我将这个单元格折叠,现在离屏的单元格将在没有动画的情况下捕捉到其旧位置,而所有其他可见单元格将像预期的那样进行动画。我的直觉说这是正确的行为,因为当执行折叠动画时,该单元格已经离开了屏幕,���且没有被包含在动画渲染过程中。我的问题是,如何防止这种情况发生?
我希望所有单元格一起动画,无论它们是否在屏幕外。有什么想法吗?