谈谈UICollectionView添加头视图的方法

UICollectionView、UICollectionReusableView头视图重叠问题 问题背景: 从UICollectionView的使用中,我们知道UICollectionReusableView的使用是需要注册的,这就不难理解,他的机制和cell的重用机制类似,所以我们在对UICollectionReusableView进行操作的时候,如果出现问题,大都是视图的重叠。 阅读详情

这几天在写项目的时候用到了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糖糖

CollectionView瀑布流添加头视图,自定义Cell计算高度 在开发时,看到CollectionView制作的瀑布流图册很好看,于是就做了一个,效果确实可以。刚好在开发时有这种布局需求,于是把之前做的瀑布流拿来改进,还是遇到了许多问题。 先看一下效果, 首先是,需求加了个头视图在顶部,在collectionView中的头视图跟TableView的不一样,TableView只要设置 tableview.tableHea 阅读详情

相关推荐

【iOS】UICollectionView的装饰视图——decorationView

最近有一个新需求,需要给列表中每一个section单独加一个背景,如下: 这……用tableview做的想法在看到这个背景的时候就没了,人也傻了。百度了一下发现UICollectionView可以实现,就是使用decorationView,不过资料还蛮少的,都是13年左右,坑也有不少,自己先按着教程摸索着整了一个,记录一下。 先说一下流程: 创建一个继承自UICollectionReusableView的视图,这就是我们接下来要用的decorationView装饰视图,这里我命名为XY_RM_ListVi

sinat_33495069的博客 2140

UICollectionView 悬浮headerView

背景:swift 3.0 、Xcode 9通过继承 UICollectionViewFlowLayout,重载三个子类方法实现悬浮结果:shouldInvalidateLayout(forBoundsChange:)layoutAttributesForElements(in:)layoutAttributesForSupplementaryView(ofKind:at:)1.shouldInva...

东坡的博客 1589

iOS UICollectionView学习之二,纯代码实现布局,纯代码实现添加Section Header头部视图和 Section Footer尾部视图

iOS UICollectionView学习之二,纯代码实现布局,纯代码实现添加头部视图跟尾部视图,Header和footer 1、首先看下整个Demo的整体结构:如下图 2、直接上代码 1.自定义单元格类----------MyCell.h  里面添加 @interface MyCell : UICollectionViewCell @property(s

万里初心 1万+

iOS开发之UICollectionView的headerView实现与TableView一样的漂浮效果

使用 点击这里查看 这次主要是写关于UICollectionView的头部使用还有漂浮效果 相关代码请参考本人github上的代码 点击这里进入源代码 在UICollectionViewFlowLayout里面实现的代码是没有依赖和耦合性的,如果项目需要可以直接导入修改layout就行了 collectionview头部漂浮效果.gif 介绍UICollectionVie

zhonggaorong的专栏 1万+

基于深度学习方法(7种)的高光谱与多光谱图像融合(附代码+3个数据集获取)

其他不懂的可以把代码发给AI哦,让它给你解读。

热爱分享,热爱记录 1298

Stata实战:用双向固定效应模型分析房价,从数据清洗到结果解读(附完整代码)

本文详细介绍了如何使用Stata实现房价数据的双向固定效应模型分析,从数据清洗到结果解读的全流程。通过具体代码示例,帮助读者掌握面板模型的应用技巧,特别适合经济学和金融学研究者进行房价影响因素分析。

weixin_31528001的博客 277

[iOS]UICollectionView添加headerView

31231

Gamin 1万+

基于three.js的室内全景3D展馆案例分享

3D场景展厅

acheng 3558

怎样在UICollectionView中添加Header和footer

为什么80%的码农都做不了架构师?>>> ...

weixin_33875564的博客 583

控制台模拟前端请求实现快速刷网课时长

本教程仅用于学习前端技术和网页开发,旨在提供教育与技术指导。对于任何未经授权或违反规定的使用行为,本人不承担任何责任。注意到那个serive后面有timestamp时间戳,暗示它很可能就是每30秒汇报一次进度和播放时长的命令,我们右键——复制——复制为fetch。有的网站上的网课需要的不仅仅是进度,而是时长,所以倍速插件失效,但我们可以使用控制台命令来模拟请求实现快速刷网课时长。尝试修改即可,例如我修改time为800,然后复制粘贴到控制台执行。播放视频,等待前端请求出现,然后复制前端请求为fetch。

m0_74823408的博客 2066

告别传统RAG的痛点!Agent Skills让知识库检索更智能(本地知识库搭建新思路:用Agent Skills实现渐进式检索)

传统RAG在知识库检索中存在文档结构丢失、Token消耗大等问题 📚 Agent Skills通过分层索引、渐进式检索等设计,实现了更智能的本地知识库检索方案 🤖 本文详细介绍了Agent Skills的核心设计理念、与传统RAG的对比以及实践建议,帮助你搭建高效的知识库系统 ✅

XiaoqiangClub的博客 693

UICollectionView创建头部headerview

使用自带的头部视图 #import "HomeViewController.h" #import "ConstomCell.h" static NSString *headerViewIdentifier = @"hederview"; @interface HomeViewController () @property (nonatomic,strong

Leemin_ios的博客 1240

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第1套模块A:网络构建 & (五)无线网络配置+(六)出口网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第1套模块A:网络构建 & (五)无线网络配置+(六)出口网络配置-命令配置

君逍遥o 408

collectionView怎么添加头视图

经常有朋友在群里面问collectionView怎么添加头视图,不止一个问的,好多都在问,所以小编索性就写了一篇collectionView怎么添加头视图的博客,供大家参考学习。

Think_lion的博客 1万+

数据挖掘实战-基于随机森林算法的交通事故预测模型

本实验数据集来源于Kaggle,原始数据集共有209306条,该数据集包含不同地区和时间段的交通事故详细信息。它包括各种指标,例如事故日期、天气状况、照明条件、碰撞类型、受伤人数和车辆参与情况。数据涵盖多个地点和事故类型,可全面了解交通事故及其原因。具体包括:crash_date:事故发生的日期。Traffic_control_device:所涉及的交通控制设备的类型(例如交通灯、标志)。weather_condition:事故发生时的天气状况。

m0_64336780的博客 1万+

PR工具timing report中setup time的计算过程

然后去pr工具里报告report_delay_calculation/reportDelayCalculation -from related_pin -to constraint_pin。这里constraint pin就是D pin (D0 D1 D2 D3),related pin就是 CK pin。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 455

给UICollectionView添加头视图

给UICollectionView添加头视图 #import "PhotoWallCell.h" #import "PhotoWallModel.h" #define kScreenWidth [UIScreen mainScreen].bounds.size.width #define kScreenHeight [UIScreen mainScreen].b

Lu_Ca的博客 4645

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

iOS中UICollectionView添加头视图的方法

在使用UICollectionView的时候,我们需要设置三个代理,分别是UICollectionDelegateFlowLayout,UICollectionViewDelegate,UICollectionViewDataSource。注册头视图:(跟注册cell类似) ①.   //注册头视图    [collectionView registerClass:[HXHBabyHeaderMo...

haoxuhong的博客 5030

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

UICollectionView 头视图、 尾视图以及Cell自定制

#import "ViewController.h" #import "CustomCollectionViewCell.h" @interface ViewController ()<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout> { ...

WJC15631717349的博客 243

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

CollectionView的HeaderView头视图悬停

上一篇我写了关于CollectionView的HeaderView头视图的添加的方法和实现,现在又需要在滑动的时候像TableView的section一样在顶部悬停,在网上搜索了一些文章也比较少提到collectionView头视图悬停的,而且也不是瀑布流布局的。有几篇写的也是同一个地方复制的,看不太懂。 后来在github上有一个SYStickHeaderWaterFall 写了这个悬停程序h

COOL_BEAR_XX的专栏 6627

collectionView头视图与组视图的创建

//1.头视图的创建 static NSString *headerViewIdentifier = @"hederview"; -(void)addCollectionView {     UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc]init];     layout.

qq_31942467的博客 3840

swift-UICollectionView添加头视图(返回图片文字xib等)

1.设置组头的大小 layout.headerReferenceSize = CGSize(width: 375, height: 160) 1 2.注册: 返回的是 UICollectionReusableView collectionView.register(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: “kHea

todovista的博客 1622

CollectionView (二)头/尾视图

添加头尾部视图流程 第一步自定一个view该view继承UICollectionReusableView @interface CollectionHeaderView : UICollectionReusableView 第二步注册headerview //注册头部视图 [collectionView registerClass:[CollectionHeaderView class...

江苏小白龙 638

IOS 自定义UICollectionView的头视图或者尾视图UICollectionReusableView

这篇文章主要介绍了IOS 自定义UICollectionView的头视图或者尾视图UICollectionReusableView的相关资料,需要的朋友可以参考下 IOS 自定义UICollectionView的头视图或者尾视图UICollectionReusableView 其实看标题就知道是需要继承于UICollectionReusableView,实现一个满足自己需求的视图.那么如何操作了,看下面代码: ViewController.m文件中 #import "ViewControl..

az44yao的专栏 1823

代码添加UICollectionView添加头视图

Demo 地址 :https://github.com/MoreZone/UIcollectionHeadDemo.git 往期瀑布流 地址:https://github.com/MoreZone/CLWaterFlowDemo.git  最近用到UICollectView 头视图,不同于tableview 的头视图一句话完事 。 1)tabview 用到头视图时候只需要一句话就能用

More丶的博客 4855
上一篇: UIImagePickerView的应用 (李梦珂)
下一篇: 装饰设计模式(三)demo
xiyouiOS
博客等级 码龄11年 4粉丝 45原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值