美文网首页
iOS开发之UICollectionView

iOS开发之UICollectionView

作者: 朱晓晓的技术博客 | 来源:发表于2018-04-12 15:27 被阅读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];
     }
    

    相关文章

      网友评论

          本文标题:iOS开发之UICollectionView

          本文链接:https://www.haomeiwen.com/subject/sltfkftx.html