我有一个 UICollectionViewController 使用标准UICollectionViewFlowLayout
来显示单个垂直列的单元格。我正在尝试在点击单元格时在单元格上创建展开/折叠动画。我使用以下代码来完成此操作:
- (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:
方法很好地动画这个大小变化。然而!当动画发生时,扩展单元格可能会导致屏幕底部的部分可见单元格离开屏幕。
如果是这种情况,我随后折叠此单元格,现在屏幕外的单元格将在没有动画的情况下捕捉到其旧位置,而所有其他可见单元格将根据需要进行动画处理。我的直觉说这是正确的行为,因为在执行折叠动画时单元格不在屏幕上,并且不包含在动画渲染过程中。我的问题变成了,我该如何防止这种情况发生?
我希望所有单元格一起制作动画,无论它们是否在屏幕外。有什么想法吗?