UICollectionView 隐式动画的问题

最近使用UICollectionView来布局页面,在开发过程中发现一个问题。

创建UICollectionView的头部的代理方法viewForSupplementaryElementOfKind,当手动调用UICollectionView的reloadData时,viewForSupplementaryElementOfKind方法不会回调。

1、需求:

collectionView的header需要根据数据进行不同的布局,各种布局高度也不一样。

2、方案:

(方案相对比较粗暴,如有更好的方案,还望不吝赐教)
注释:collectionView采用懒加载方式加载

2.1、reloadData 会引起collectionView的隐式动画
[_collectionView removeFromeSupView];
_collectionView = nil;
[self.collectionView reloadData];
2.2、我采用的方案
 [_collectionView removeFromSuperview];
  _collectionView = nil;
 [UIView animateWithDuration:0 animations:^{
       [self.collectionView performBatchUpdates:^{
           [self.collectionView reloadData];
       } completion:nil];
 }];
2.3、关闭collectionView隐式动画的另一方案
[UIView setAnimationsEnabled:NO];
[collectionView performBatchUpdates:^{
    [collectionView reloadData];
} completion:^(BOOL finished) {
    [UIView setAnimationsEnabled:YES];
}];



2020.03.29

2.4、UICollectionView用核心动画关闭隐式动画
[CATransaction setDisableActions:YES];
[self.collectionView reloadData];
[CATransaction commit];

总结

lz采用的方案相对比较粗暴,其实还有其他方案的。比如:把headerView用UICollectionViewCell来实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容