iOS开发之UICollectionView

2018-04-12  本文已影响79人  朱晓晓的技术博客
1.UICollectionView section的头视图 复用BUG解决
第一次在项目中运用到UICollectionView添加头视图的情况,
而且每个section的headerVeiw大小不一样,
在运行时出现了headerView复用导致其他section的头视图大小和前面的一样,
一开始的想法是每次都新建UICollectionReusableView对象,
而不从闲置池中拉取,
但遗憾的是木有找到这个实例化方法(有知道的大神请告知一下),
所以就想到了在复用headerView之前先将其中的子视图remove掉,
这样就可以避免BUG

-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{

        UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView" forIndexPath:indexPath];

       for (UIView *view in headerView.subviews) {
        [view removeFromSuperview];
    }

}
image.png
2.collectionViewCell防止复用的两种方法
第一种:
//在创建collectionView的时候注册cell(一个分区)
 UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@“cell" forIndexPath:indexPath]; 
for (UIView *view in cell.contentView.subviews) {
 [view removeFromSuperview];
 }


第二种:
//在cellForItem方法中注册cell(多个分区)
 NSString *identifier=[NSString stringWithFormat:@"%ld%ld",(long)indexPath.section,(long)indexPath.row];
 [collect registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:identifier]; 
UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; 
for(id subView in cell.contentView.subviews){
 if(subView){ 
[subView removeFromSuperview];
 }
上一篇下一篇

猜你喜欢

热点阅读