今天在设置UICollectionView的头部View的时候发现了一个问题
我们的需求是在头部添加一个轮播图 当有数据是头部View显示 没有数据时就不显示
根据查到的资料 我直接设置了headerReferenceSize的高度 flowLayout.headerReferenceSize = CGSizeMake(0, 150);
然后在[_collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"UICollectionViewHeader"];
设置你要创建一个头部View,这跟创建cell差不多。
这也是和tableView创建头部View的一点区别
之后添加这个方法 -(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
UICollectionReusableView * headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"UICollectionViewHeader" forIndexPath:indexPath];
[headView addSubview:_cycleScrollView];
return headView;
}
当然 _cycleScrollView 也要创建 我是单独创建的
- (void)addBannerWithDic:(NSArray *)arr {
_cycleScrollView = [YCCycleScrollView cycleScrollViewWithFrame:CGRectMake(0, 0, screenWidth, 150) delegate:self placeholderImage:[UIImage imageNamed:@"imgCoverDefault.jpg"]];
_cycleScrollView.pageControlAliment = YCCycleScrollViewPageContolAlimentRight;
_cycleScrollView.currentPageDotColor = AppColor_Theme;
_cycleScrollView.autoScrollTimeInterval = 5;
}
强调一点 这里的frame 设置 对在UIcollectionView 中头部View的frame好像没有关系 必须要 flowLayout.headerReferenceSize = CGSizeMake(0, 150); 这样设置 才会显示出来
但是这样做之后 HeadView的高度就写死了 不管有没有数据 他都会显示在那里 没有数据时 就会显示空白 很难看
然后 我就选择了下边这个方法 暂时解决了轮播图的显示隐藏问题
-(CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
if(_bannerArrs.count > 0)
{
CGSize size = {0, 150};
return size;
}
else
{
CGSize size = {0, 0};
return size;
}
}
当然如果有更好的解决在UIcollectionView 中判断是否显示轮播图的方案 希望大神也可以不吝指教
网友评论