UICollectionView 基础全面解析

57、集合视图布局与数据源的深入解析 本文深入解析了iOS开发中集合视图的布局设计与数据源管理,涵盖了补充项、多部分布局、组合布局、正交滚动、嵌套组、手动单元格布局等核心布局功能,同时探讨了UICollectionViewDiffableDataSource的使用以及iOS 14中列表布局的新特性。通过示例代码和详细说明,帮助开发者掌握集合视图的高级用法,提升界面设计灵活性和数据处理效率。 阅读详情

在iOS开发中经常会用到UICollectionView,和UITableView同样即成UIScrollView 但是操作起来比UITableVIew要麻烦一些 ,有些地方需要注意,一下是UICollectionView基础详解。

//

//  ViewController.m

//  Collection



#import "ViewController.h"

#import "CollectionViewCell.h"

#import "CollectionViewCell1.h"

#import "CollectionReusableView.h"

@interface ViewController ()<UICollectionViewDelegate,UICollectionViewDataSource>

@property(nonatomic,strong)UICollectionView *collectionView;

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    //此处必须要有创见一个UICollectionViewFlowLayout的对象

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

    //同一行相邻两个cell的最小间距

    layout.minimumInteritemSpacing = 5;

    //最小两行之间的间距

    layout.minimumLineSpacing = 5;

    

    _collectionView=[[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, 375, 667) collectionViewLayout:layout];

    _collectionView.backgroundColor=[UIColor whiteColor];

    _collectionView.delegate=self;

    _collectionView.dataSource=self;

    //这个是横向滑动

    //layout.scrollDirection=UICollectionViewScrollDirectionHorizontal;

    [self.view addSubview:_collectionView];

    

    /*

     *这是重点 必须注册cell

     */

    //这种是xib建的cell 需要这么注册

    UINib *cellNib=[UINib nibWithNibName:@"CollectionViewCell" bundle:nil];

    [_collectionView registerNib:cellNib forCellWithReuseIdentifier:@"CollectionViewCell"];

    //这种是自定义cell不带xib的注册

//   [_collectionView registerClass:[CollectionViewCell1 class] forCellWithReuseIdentifier:@"myheheIdentifier"];

    //这种是原生cell的注册

//    [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];

    

    //这是头部与脚部的注册

    UINib *cellNib1=[UINib nibWithNibName:@"CollectionReusableView" bundle:nil];

    [_collectionView registerNib:cellNib1 forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"CollectionReusableView"];

    [_collectionView registerNib:cellNib1 forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"CollectionReusableView"];

}

//一共有多少个组

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{

    return 1;

}

//每一组有多少个cell

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

    return 10;

}

//每一个cell是什么

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    CollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" forIndexPath:indexPath];

    cell.label.text=[NSString stringWithFormat:@"%ld",indexPath.section*100+indexPath.row];

    cell.backgroundColor=[UIColor groupTableViewBackgroundColor];

    return cell;

}

//头部和脚部的加载

-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{

    UICollectionReusableView *view=[collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"CollectionReusableView" forIndexPath:indexPath];

    UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(110, 20, 100, 30)];

    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {

        label.text=@"头";

    }else{

        label.text=@"脚";

    }

    [view addSubview:label];

    return view;

}

//每一个分组的上左下右间距

-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

{

    return UIEdgeInsetsMake(5, 5, 5, 5);

}

//头部试图的大小

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{

    return CGSizeMake(50, 60);

}

//脚部试图的大小

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section

{

    return CGSizeMake(50, 60);

}

//定义每一个cell的大小

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

{

    return CGSizeMake(115, 100);

}


//cell的点击事件

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{

    //cell被电击后移动的动画

    [collectionView selectItemAtIndexPath:indexPath animated:YES scrollPosition:UICollectionViewScrollPositionTop];

}

@end


//如果有什么不到之处,欢迎多多与我交流   今天或明天我还会出进阶篇,自定义流水布局
下面是结果图

Objective-C实现iOS下拉菜单的两种方法:UITableView与UICollectionView 创建一个自定义的UICollectionViewLayout,需要遵循以下步骤:创建一个UICollectionViewLayout的子类。实现方法,初始化布局参数。实现方法,返回所有需要布局的视图的布局属性。实现方法,返回特定item的布局属性。根据布局需求,可能还需要实现等其他方法。自定义UICollectionViewCell需要遵循以下步骤:创建一个UICollectionViewCell的子类。在该子类中重写。 阅读详情

相关推荐

YOLOv5驾驶员困倦检测与危险驾驶行为识别:从数据集构建到边缘部署实战

目标检测是计算机视觉的核心任务,YOLO系列因速度与精度平衡被广泛采用。YOLOv5通过CSPDarknet骨干网络与PANet特征融合,实现单阶段实时检测,在边缘设备上具备高性价比。其技术价值在于支持ONNX导出与INT8量化,适配RK3568、树莓派等低功耗平台。典型应用包括驾驶员困倦检测、抽烟喝水打电话识别等危险驾驶行为监测。本文围绕YOLOv5训练自定义数据集,详解类别设计、超参数调优、模型量化及后处理误报过滤,帮助开发者快速落地驾驶员行为检测系统。

weixin_34323858的博客 435

UICollectionView详解

https://www.jianshu.com/p/abe04dd6164f 这是一篇详细解释UICollectionView的文章 我们先从这篇文章开始。 基础: collection view 是运用一个灵活多变的布局呈现一系列有序数据项的一种方法。collection view最通常的使用使用像网格状排列来呈现数据项,但是 iOS 的 collection view 的能力不仅限于行和列。使用 collection views, 视觉元素的精确布局可通过子类化定义并被动态改变。所以你可以实现网格,栈,

Tech in Pieces 6332

UICollectionView、UICollectionView基本用法、UICollectionView详解

UICollectionView、UICollectionView基本用法、UICollectionView详解,UICollectionView常用方法

【iOS开发】—— UICollectionView的介绍

UICollectionView的简单学习

weixin_50990189的博客 5893

IBM AC922 8335-GTW 安装linux,CentOS,ubuntu,RHEL各种坑

AC922

u011970286的专栏 891

STM32F407 HAL库定时器触发ADC采集与DMA数据传输(定时器TIM+ADC+DMA)

在STM32F407系列微控制器的开发中,结合定时器、ADC(模数转换器)与DMA(直接存储器访问)控制器,能够显著提升数据采集与传输的效率。本文将指导你如何使用STM32 HAL库,通过定时器触发ADC1的单通道采集,利用DMA传输数据,最终通过串口将电压值打印出来。具体实现中,我们将读取ADC1的通道5(对应引脚PA5),并将转换得到的电压值发送到串口助手上进行显示。

jmlinux的博客 7011

【iOS】UICollectionView

UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似。简单来说,UICollectionView是比UITbleView更加强大的一个UI控件,有如下几个方面:1、支持水平与垂直布局2、通过layout配置的方式进行布局3、CollectionView中Item的大小与位置可以自由定义4、通过layout布局回调的代理方法,可以动态的定制每个item的大小和collection的大体布局属性。

weixin_72437555的博客 3164

5分钟搞懂基因组规模代谢网络(GSMM):从数据库选择到模型构建全流程

本文详细解析基因组规模代谢网络(GSMM)构建的全流程,从数据库选择到模型优化。重点介绍MetaCyc、BiGG等主流数据库的黄金三角评估法则,对比自上而下与自下而上两种建模方法,并提供模型修剪、仿真优化的实用技巧与避坑指南,帮助研究者高效构建精准代谢网络模型。

weixin_30872157的博客 135

iOS开发中UICollectionView的用法详解第一篇(UICollectionViewLayout)

这篇文章主要讲解UICollectionViewLayout的用法。

我叫柱子哥 3074

智能体在车联网中的应用:第9天 核心工具链与仿真世界:SUMO交通仿真入门——从安装到构建你的第一个虚拟十字路口

摘要 SUMO是一款开源微观交通仿真工具,为车联网和自动驾驶算法开发提供高效安全的测试环境。文章详细介绍了SUMO的核心概念、安装方法及实战应用。在Ubuntu或Windows系统安装SUMO后,可通过netedit工具构建十字路口路网,包括创建节点、连接边、设置交通信号灯等步骤。随后通过编写.rou.xml文件定义车辆类型、路线和车流,实现动态交通场景模拟。SUMO支持与外部程序交互,能复现真实场景、进行极端测试和算法验证,是车联网研究的理想数字沙盘。

IT深耕十余载,大道之简 1451

Cadence PSpice 仿真0:绘制电路图方法图文教程

在使用PSpice进行电路的仿真时,首先需要使用带有PSpice模型的元器件来绘制电路图,本文简单介绍进行电路图绘制是常用的几种需要掌握的方法,以满足PSpice仿真绘制简单电路图所用。

fydar的博客 4703

集合视图(UICollectionView)

集合视图的四个组成部分: 单元格:它是集合视图中的一个单元格。 节:它是集合视图中的一个行数据,由多个单元格构成 补充视图:它是节的头和脚 装饰视图:集合视图中的背景图。 UICollectionView继承自UIScrollView。有两个协议:UICollectionViewDelegate委托协议和UICollectionViewDataSource数据源协议。 UIC...

a1293的博客 192

Ubuntu Rtx3090 Cuda11.7 安装 pytorch3d

pytorch ubuntu pytorch3d 安装

G果的博客 2273

iOS - UICollectionView

  UICollectionView可理解为多列的UITableView,也继承自UIScrollView,可以进行滑动,可以设治左右滑动或上下滑动。collectionViewLayout让UICollectionView的布局更灵活实用,且可编辑性更高。 UICollectionViewFloeLayout (自定义成为各种布局的关键)   minimumLineSpaci...

a861465724的博客 218

Kimi Code国产AI编程助手安装使用详细教程

Kimi Code 开发者智能编程服务简介:Kimi Code 是专为开发者提供的 AI 编程辅助工具,基于旗舰模型 Kimi K3(2.8万亿参数,支持100万token上下文)。提供 CLI、VS Code 插件等形式,支持代码阅读、编辑等功能。用户可通过API Key接入第三方工具。安装简单(Windows/Mac/Linux一键脚本),需在官网生成API密钥并登录使用。注意账户需充值余额方可正常调用服务。

猿小白的博客 2051

MATLAB算法实战应用案例精讲-【数模应用】梯度提升决策树(GDBT)(附python代码)

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。.........

qq_36130719的博客 2077

UICollectionViewLayout 属性和方法

原文:https://www.jianshu.com/p/ac40c2be4209 UICollectionView 结构 Collection View的构成,我们能看到的有三个部分: Cells Supplementary Views 追加视图 (类似Header或者Footer) Decoration Views 装饰视图 (用作背景展示) UICollectionViewL...

不要忘记,你还有生活。 1622

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

UICollectionViewController

1、collectionView 的创建 1.1 ViewController.m 遵守协议 UICollectionViewDataSource, UICollectionViewDelegate // 数据源初始化 // 声明数据源 @property(nonatomic, retain)NSMutableArray *myDataArray; myDataArray = [[NSM...

weixin_34248023的博客 88

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Harness 基准对比实战:用可复现任务集量化 harness 变更的影响(learn-harness-engineering 第 12 课配套模板解析)

本篇文章以 [docs/fr/lectures/lecture-12-why-every-session-must-leave-a-clean-state/code/benchmark-comparison-template.md](https://link.gitcode.com/i/6908e2cfaf247cf928d581cd1e72e065)(第 12 课《为什么每个会话都必须留下干净状

gitblog_00041的博客 529

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

iOS UIKit:CollectionView之设计 (1)

collection view(UICollectionView对象)使用灵活和可扩展的布局来描述有序的数据项,其一般情况下以网格的形式来展示内容,但并非一定如此。 1 基础 为了将数据展示在屏幕中,Collection View需要搭配其它多种对象,其中有些是用户可选对象,而有些则是必须使用类型。 1.1 配合对象 collection vie...

a567676的博客 262

UICollectionViewLayout

UICollectionView的结构回顾 首先回顾一下Collection View的构成,我们能看到的有三个部分: Cells Supplementary Views 追加视图 (类似Header或者Footer) Decoration Views 装饰视图 (用作背景展示) 而在表面下,由两个方面对UICollectionView进行支持。其中之一和tableView一样,...

weixin_30455365的博客 78

iOS基础UI瀑布流界面简单搭建

UI瀑布流界面简单搭建

LaughMore的博客 1713

ChainPageCollectionView布局原理详解:CentralCardLayout与EdgeCardLayout对比

如果你正在为iOS应用寻找一个优雅的卡片式视图解决方案,那么ChainPageCollectionView绝对是你的理想选择。这个开源库提供了两种独特的卡片布局方案:CentralCardLayout(中心卡片布局)和EdgeCardLayout(边缘卡片布局),让开发者能够轻松实现流畅的卡片切换动画效果。本文将深入解析这两种布局的核心原理、使用场景和实际效果对比,帮助你快速掌握这个强大的iOS

gitblog_00559的博客 1036

ViewAnimator核心解密:如何用Swift协议实现可组合动画系统

你还在为iOS视图动画编写重复代码吗?还在为复杂动画组合感到头疼?ViewAnimator通过巧妙的协议设计,让动画实现变得简单优雅。本文将深入解析ViewAnimator的核心架构,带你掌握如何用Swift协议构建灵活可组合的动画系统。读完本文,你将能够:理解协议驱动的动画设计思想、掌握多种基础动画的实现方式、学会组合复杂动画效果、了解开源项目的最佳实践。 ## 协议驱动的动画设计基石 Vi...

gitblog_00991的博客 387
上一篇: iOS 开发 单例的写法
下一篇: iOS 自定义流布局 进阶篇
wjymark
博客等级 码龄10年 7粉丝 13原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值