谈谈UICollectionView添加头视图的方法

https://blog.csdn.net/xiyouiOS/article/details/50191101
这几天在写项目的时候用到了UICollectionView,在做的时候,需要给整体的CollectionView上面放一个大的头视图,就类似Share中主页面的tableView效果类似。但是当我真正使用的时候发现,这个头视图和tableView里面的头视图,有很大的区别。

开始的效果


最后的效果

其实这种效果实现起来也不难,在使用UICollectionView的时候,我们需要设置三个代理,分别是UICollectionDelegateFlowLayout,UICollectionViewDelegate,UICollectionViewDataSource。

在使用UICollectionView的时候,一开始我们都要定义一个FlowLayout,也就是下面这段代码
 

UICollectionViewFlowLayout *flowLayout  = [[UICollectionViewFlowLayout alloc] init];

如果你要设置头视图,在flowLayout中要设置一个头视图的大小参数,设置方法如下

flowLayout.headerReferenceSize = CGSizeMake(0, Height / 4);


CGSizeMake中是你头视图的大小,当然,这块参数对我们今天要讲的这个效果影响不大,具体为啥,后面会说。
在设置头视图的时候,记住,这块也是我感觉有点奇葩的地方,就是使用头视图的时候,必须先注册一个!!对,和使用UICollectionViewCell的时候情况一样,都需要注册,如果你不注册,会导致使用下面要说的方法的时候,使程序崩溃。头视图的注册方法如下:

//注册头视图
 

  [self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"UICollectionViewHeader"];


这块注册的Identifier在下面的方法实现中是会使用到的,这里跟UICollectionViewCell是类似的,其实,也可以说是一样的。
现在,我们可以写UICollectionViewDataSource的头视图设置方法了,具体如下:

//创建头视图

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView
           viewForSupplementaryElementOfKind:(NSString *)kind
                                 atIndexPath:(NSIndexPath *)indexPath {
    
    UICollectionReusableView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader
                                                                            withReuseIdentifier:@"UICollectionViewHeader"
                                                                                   forIndexPath:indexPath];
    headView.backgroundColor = [UIColor redColor];
    
    return headView;
}

做完上面这些步骤之后,你就可以启动程序看看效果了。启动后你会发现,你创建的头视图是这样的

你会发现,头视图加的有点奇怪。其实,这种方法添加的是每个section的头视图,也就是每一行都会有对应的头视图和尾视图,我们添加的,就是这些section的头视图。那么,我们怎么实现开头说的那种效果呢?其实,这里有一个小小的技巧,在UICollectionViewDelegateFlowLayout中有一个方法是用来设置头视图的大小的,那么我们就可以利用这个方法,来实现我们需要的效果。具体实现如下:

// 设置section头视图的参考大小,与tableheaderview类似

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout
referenceSizeForHeaderInSection:(NSInteger)section {
    
    if (section == 0) {
        return CGSizeMake(self.view.frame.size.width, Height / 4);
    }
    else {
        return CGSizeMake(0, 0);
    }
}


可以看到,我们在section == 0的时候加上其的大小,而在其他情况下,将其大小设置成0。也就是说,只有第一行的头视图有大小,其他行的头视图是没有大小的,也就是大小为0。这样,运行出来的效果就是开头的那样:

在一开始我们说过,在flowLayout中要设置头视图的大小,但是在这里没有什么用,因为我们写了上面那个代理方法,在代理方法中对头视图的大小进行了设置,所以,在flowLayout中也就不必再重复设置了。但是,一旦你没有写上面的这个代理方法,那么你就必须在flowLayout中设置头视图的参数。这样,头视图才能设置出来。这样,我们就能实现一个类似tableView添加头视图的效果了。

那么,在整个过程中,我们需要注意这么几点:

1.如果你没有写设置头视图大小的代理方法,那么在一开始设置flowLayout的时候你就需要设置头视图的大小参数。

2.在设置头视图的时候,切记一定要在前面对其进行注册,否则程序会崩溃

3.需要注意,你在刚开始注册的identifier和下面定义头视图的时候初始化使用的identifier要一致,不能使用不同的identifier

4.你需要看你的具体需求来写设置头视图大小的方法

这种设置头视图的方法是自己无意中看到那个设置section头视图大小的代理方法的时候想到的,如果有更好的实现方法,欢迎交流。

--by糖糖
————————————————
版权声明:本文为CSDN博主「xiyouiOS」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiyouiOS/article/details/50191101

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
兼容视图是指在不同的设备或不同的浏览器上保持一致的显示效果。c 增加兼容视图是为了使网站在各种设备上都能正常显示,并提供良好的用户体验。 首先,我们需要了解网站在不同设备上的显示效果差异。不同的设备有不同的屏幕大小、分辨率和浏览器特性,这些因素都会导致网站在不同设备上的显示效果不一样。 为了解决这个问题,c 需要添加兼容视图。兼容视图可以通过以下几种方式来实现: 1. 使用响应式布局:响应式布局是指根据设备的屏幕大小来调整网站的布局和样式。通过使用CSS媒体查询,可以根据设备的特性来自动调整网站的布局和样式,让网站在不同设备上呈现出最佳的显示效果。 2. 优化图片和媒体:在不同设备上,网站加载速度可能会有差异,特别是移动设备上的网络速度相对较慢。为了提高网站的加载速度,在 c 中可以针对不同设备优化图片和媒体的大小和格式,以减少其加载时间。 3. 浏览器兼容性:不同浏览器对网页的渲染方式可能会有所不同。为了保证网站在不同浏览器上的兼容性,c 需要进行浏览器兼容性测试,并对不同浏览器的兼容性问题进行修复。 通过以上方法,c 可以为网站添加兼容视图,使其在不同设备和浏览器上都能够正常显示。这样的兼容视图能够提供良好的用户体验,使用户在不同设备上都能够方便地访问和使用网站。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值