直接入正题,那就。请看下面的代码
//设置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);//头部
就可以不要了。
好了,就酱。
网友评论