使用performBatchUpdates方法为CollectionViewCell上的高度更改设置动画时出现问题,这会导致在动画运行之前出现在屏幕外的新项目。在这种情况下,最初位于屏幕外的项目会显示在最终位置,而不是在那里进行动画处理。
答案 0 :(得分:-1)
我发现这个解决方法是为了避免在这个Github页面上出现这种不良行为。
这个技巧是通过在运行动画之前更改CollectionView的高度并将其设置回performBatchUpdate方法的完成块上的原始值来完成的。
这就是代码的样子:
frameUpdate.size.height += kExpandedHeight - kCollapsedHeight;
collectionView.frame = frameUpdate;
[collectionView performBatchUpdates:^{
_cells[indexPath.item] = @(newHeight);
} completion:^(BOOL finished) {
frameUpdate.size.height -= kExpandedHeight - kCollapsedHeight;
collectionView.frame = frameUpdate;
}];
有关此变通方法的完整项目示例,请转到Github页面
https://github.com/jpsim/UICollectionView-Animation-Bug
感谢分享JP Simard!