美文网首页iOS开发
自定义的UICollectionViewFlowLayout不执

自定义的UICollectionViewFlowLayout不执

作者: phzean | 来源:发表于2017-02-21 11:05 被阅读2699次

    直接入正题,那就。请看下面的代码

        //设置layout
        PZFlowLayout *layout = [[PZFlowLayout alloc] init];
        layout.itemCount = cellNumber;
        layout.scrollDirection       = UICollectionViewScrollDirectionVertical;
        layout.itemSize              = CGSizeMake(100, 100);
        layout.minimumLineSpacing    = 20;  //默认是10
        layout.headerReferenceSize = CGSizeMake(fDeviceWidth, 200);//头部
        
        //初始化
        UICollectionView *collectView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
        //注册cell
        [collectView registerNib:[UINib nibWithNibName:NSStringFromClass([PZFlowCollectionViewCell class]) bundle:nil] forCellWithReuseIdentifier:PZFlowCollectionViewCellIdentifierID];
        [collectView registerNib:[UINib nibWithNibName:NSStringFromClass([PZFlowCollectionHeaderView class]) bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:PZFlowCollectionHeaderViewIdentifierID];
        //设置代理
        collectView.delegate = self;
        collectView.dataSource = self;
        [collectView flashScrollIndicators];
        _homeCollectionView = collectView;
    

    是不是感觉没毛病,但是上面的代码添加过后 - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath这个方法是不会执行 ~~,一脸懵逼了,咋回事啊,然后尝试着将自定义的类PZFlowLayout换成系统的 UICollectionViewFlowLayout 类,我只能说自家人就是好说话,更换之后就真的没有毛病了,viewForSupplementaryElementOfKind:方法妥妥的执行。可是这样一来,就不能装逼了啊,幸好找到一位大神 @来自南方的熊
    解决方法就是在自定义的PZFlowLayout.m类中添加一个UICollectionElementKindSectionHeader的属性,代码如下

    - (void)prepareLayout{
      [super prepareLayout];
      _attributeArray = [NSMutableArray array];
      //头部视图
      UICollectionViewLayoutAttributes * layoutHeader = [UICollectionViewLayoutAttributes   layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader withIndexPath:[NSIndexPath indexPathWithIndex:0]];
      layoutHeader.frame =CGRectMake(0,0, 375, 200);
      [_attributeArray addObject:layoutHeader];
    }
    - (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect{
      return _attributeArray;
    }
    

    添加了这个属性之后,上面一段代码中的layout.headerReferenceSize = CGSizeMake(fDeviceWidth, 200);//头部就可以不要了。
    好了,就酱。

    项目的github地址

    相关文章

      网友评论

        本文标题:自定义的UICollectionViewFlowLayout不执

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