由于之前写的时候没有使用Markdown编辑, 所以现在没法更新之前的文章,现在重新弄一份。
首页得说下UICollectionView的使用还是挺广泛的,下面我就针对我项目中遇到的问题和大家说下。我使用UICollectionView需要自定义一个头部的View,
1、创建自定义Header类
*创建一个自定义类,继承自:UICollectionReusableView(我勾选了创建xib布局)
*在xib中定义布局
2、注册Header
我使用的是xib,所以注册如下:
static NSString * const reuseIdentifierHeader = @"HomeHeaderCell";
[self.collectionView registerNib:[UINib nibWithNibName:@"HomeHeaderView" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:reuseIdentifierHeader];
3、实现Header
- 实现CollectionView的viewForSupplementaryElementOfKind:代理方法,并设置Header的属性,如下:
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
UICollectionReusableView *headerView;
if ([kind isEqualToString:UICollectionElementKindSectionHeader]){
MGHeaderView *view = (MGHeaderView *)[collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:reuseIdentifierHeader forIndexPath:indexPath];
view.headerLabel.text = [NSString stringWithFormat:@"MG这是header:%d",indexPath.section];
headerView = view;
}
return headerView;
}
// 设置Header的尺寸
(CGSize)collectionView:(UICollectionView )collectionView layout:(UICollectionViewLayout)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{
CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
return CGSizeMake(screenWidth, 280);
}
然后运行报错:
eason: '[<NSObject 0x7fc730d34a10> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the cycleScrollView.'
网上找了一通,但是也没能找到问题的解决方法,所以自己一步一步排查,总算发现问题所在,原因就是新建自定义headerView的时候,勾选了XIB file,然后在xib中的View父类默认UICollectionReusableView
注意下这里的Class,必须要改为你对应的.h和.m文件的类名,因为创建的时候默认是UICollectionReusableView的,如果不改,然后xib中关联控件后运行就会出现上面那个setValue:forUndefinedKey的问题