UICollectionView

news2025/1/17 6:03:38

文章目录

  • 前言
  • 基础
    • 概念
    • UICollectionView与相关对象关系
      • 注意事项
    • 强大的控件
    • 相关的类
    • 重新使用视图提高性能
  • 例子
  • 一些方法


前言

本篇:进行UICollectionView的学习


提示:以下是本篇文章正文内容,下面案例可供参考

基础

概念

UICollectionView是我们常说的集合视图,是iOS开发者中最受欢迎的UI控件之一。其布局灵活可变,可用于显示有限数据项集,最常见的用途是网格的形式显示item,初次之外还可以通过子类化UICollectionViewLayOut泪,精准的控制可视化元素布局,并动态改变布局,可以实现网格,堆栈,圆形,动态变化,和任何能想象到的布局

UICollectionView与相关对象关系

data source用于提供呈现数据的视图对象
Collection View layout用于提供视图布局信息
Collection view负责将数据和布局信息整合后呈现到屏幕上

注意事项

创建UICollectionView对象时,必须传递一个UICollectionViewLayout对象,而UICollectionViewLayout对象不能直接使用,必须使用其子类,在创建网格布局时一般使用其子类UIConllectionViewFlowLayout的子类

强大的控件

UICollectionView是比UItableView更强大的一个控件。

  1. 支持水平和垂直两种方向的布局
  2. 通过layout方式进行布局
  3. 类似tableView中的cell,UICollectionView中的item可以自由定义大小和位置
  4. 可以动态布局每个item的大小和collection的大体布局属性
  5. 完全自定义一套layout的布局方案,

相关的类

用途类/协议描述
集合视图和集合视图控制器UIConllectionView,UIConllectionViewControllerUICollectionView派生于UIScrollerView,定义集合视图内容区域,将layout的布局信息和dateSource的数据整合后呈现到屏幕上
内容控制UICollectionViewDataSource协议,UICollectionViewDelegate协议dataSource为集合视图提供数据,是UICollectionView中最重要、必须提供的对象。要实现dataSource中的方法,必须创建一个遵守UICollectionViewDataSource协议的对象。通过UICollectionView的delegate对象可以监听集合视图状态、自定义视图。例如,使用delegate跟踪item是否高亮、选中。与数据源对象不同,代理对象不是必须实现
呈现视图UICollectionReusableView ,UICollectionViewCellUICollectionView中的所有视图都必须是UICollectionReusableView类的实例。该类支持回收机制,特别是在华东屏幕时。UICollectionViewCell用来显示主要数据
布局UICollectionViewLayout,UICollectionViewLayoutAttributes,UICollectionViewUpdateItemUICollectionViewLayout的子类为集合视图内元素提供位置,带下,视觉属性等布局信息。在布局构成中,layout对象创建UICollectionViewLayoutAttributes实例,告诉item如何布局 。当collectionView的数据源发生插入,删除,移动等变化时,UICollectionView会创建UICollectionViewUpdateItem类的实例,并发送给layout的prepareForCollectionViewUpdates:方法,layout会为即将到来的布局变化作准备
FlowlayoutUICollectionViewFlowLayout,UICollectionViewDelegateFlowLayout协议UIC哦来了抽屉哦那Vi额外FlowLayout类时用于实现网格或其他基于行布局的具体类,可以直接用,也可以将其于UICollectionViewDelegateFlowLayout代理结合使用,

UiCollectionViewLayout,UICollectionViewReusableView类必须子类化才可以使用,其他类可以直接使用

重新使用视图提高性能

UICollectionView使用了视图回收机制以提高性能,当视图被滑出屏幕时,不回删除视图,而是置于重用队列中。当UiCollectionView显示新的内容时,将从重用队列中获取视图。为便于回收和重用,UiCollectionView显示的所有视图必须派生UICollectionReusableView

  • 集合视图单元格UICollectionViewCell:显示集合视图的主要内容,cell必须是UICollectionViewCell类的实例,默认支持管理高粱hightlight,选中selection状态
  • 补充视图SupplementaryView:section的信息。和cell一样supplementaryView也是数据驱动的,但与cell不同的是layout控制supplementaryView的位置和是否使用。流式布局UICollectionViewFlowLayout可以选择性添加页眉sectionheader和页脚sectionfooter补充视图
  • 装饰视图DecorationView:由layout完全拥有的装饰视图,且不受数据眼约束。

UICollectionView的数据源对象负责提供cell和supplementaryView,但dataSource从来不会直接创建cell,supplementaryView。当需要展示视图时,如果队列存在所需类型的视图,则会直接出列所需视图,如果队列没有所需视图,则会利用提供的nib文件,storyboard或代码创建。

例子

在这里插入图片描述

//  ViewController.h
//  CollectionView
//
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

<UICollectionViewDelegate,
UICollectionViewDataSource>

@property (strong, nonatomic) UICollectionView* collectionView;
@property (strong, nonatomic) UICollectionViewFlowLayout* flowLayout;

@end




//  ViewController.m
//  CollectionView
//
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.flowLayout = [[UICollectionViewFlowLayout alloc] init];
    self.flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
    self.flowLayout.itemSize = CGSizeMake(self.view.frame.size.width/5 - 20, self.view.frame.size.height / 5 - 20);
    self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) collectionViewLayout:self.flowLayout];
    self.collectionView.delegate = self;
    self.collectionView.dataSource = self;
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"111"];
    [self.view addSubview:self.collectionView];
    
    
    // Do any additional setup after loading the view.
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 10;
}
- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath{
    UICollectionViewCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"111" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor grayColor];
    UILabel* lab = [[UILabel alloc] init];
    lab.frame = CGRectMake(10, 10, 30, 30);
    lab.text = @"1111";
    [cell.contentView addSubview:lab];
    return cell;
}
@end

一些方法

//设置item间距大小
- (CGFloat)collectionView:(UICollectionView*)collectionView layout:(nonnull UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{
    return 20;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【毕业设计】31-基于单片机的农业蔬菜大棚温度自动控制系统设计(原理图工程+源码工程+仿真工程+答辩论文+答辩PPT)

typora-root-url: ./ 【毕业设计】31-基于单片机的农业蔬菜大棚温度自动控制系统设计&#xff08;原理图工程源码工程仿真工程答辩论文答辩PPT&#xff09; 文章目录typora-root-url: ./【毕业设计】31-基于单片机的农业蔬菜大棚温度自动控制系统设计&#xff08;原理图工程源…

NetCore OpenIdConnect验证为什么要设置Authority?

在使用Identity Server作Identity Provider的时候&#xff0c;我们在NetCore的ConfigureServices((IServiceCollection services))方法中,常需要指定options的Authority&#xff0c;如下代码所示&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 …

基于PHP+MYSQL酒店管理系统的设计与开发

随着人们生活条件的提高,旅游和出差已经成了家常便饭,但是因为他向异地所以第一个要解决的问题就是吃住问题,吃先对是比较好解决的一个问题,随便一个超市或者饭店甚至地摊就能解决这一问题,但是总不能露宿街头吧,所以很多人在到达目的地的第一时间就是去寻找一个能够入住的酒店…

一文彻底搞懂Mysql索引优化

专属小彩蛋&#xff1a;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff08;前言 - 床长人工智能教程&#xff09; 目录 一、索引介绍 二、性能分析 三、查询优化 一、索引介绍…

Python使用矩阵分解法推荐系统找到类似的音乐

这篇文章是如何使用几种不同的矩阵分解算法计算相关艺术家。最近我们被客户要求撰写关于的矩阵分解法推荐系统研究报告&#xff0c;包括一些图形和统计输出。代码用Python编写&#xff0c;以交互方式可视化结果。 加载数据 这可以使用Pandas加载到稀疏矩阵中&#xff1a; # r…

Jmeter 使用BeanShell断言,实现自动获取文章列表,并判断文章是否为当天发布的

系列文章目录 提示&#xff1a;阅读本章之前&#xff0c;请先阅读目录 文章目录系列文章目录前言一、正则表达式提取器&#xff0c;提取所有文章id二、循环控制器&#xff0c;读取每篇文章的创建时间三、JSON提取器&#xff0c;提取创建时间&#xff0c;然后进行判断四、运行结…

Java设计模式七大原则-里氏替换原则

里氏替换原则 OO中的继承性的思考和说明 继承包含这样一层含义&#xff1a;父类中凡是已经实现好的方法&#xff0c;实际上是在设定规范和契约&#xff0c;虽然它不强制要求所有的子类必须遵循这些契约&#xff0c;但是如果子类对这些已经实现的方法任意修改&#xff0c;就会对…

1540_AURIX_TriCore内核架构_FPU

全部学习汇总&#xff1a; GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com) 这一次看一下TriCore的FPU&#xff0c;浮点处理单元。说起来&#xff0c;这算是很多MCU中的一个高级模块了。 1. 在TriCore中FPU其实是可选实现的&a…

动画演示选择排序(Selection Sort)

1、排序规则 1.1 一句话总结选择排序 从数组中第一个数字开始&#xff0c;数组中每个数字都要和后面所有数字比一次大小&#xff0c;每每次循环遍历当前最小值&#xff0c;放在当前循环范围内的最小位置。当完成第 N - 1 次循环之后&#xff0c;排序完成。N 数组长度 - 1。 …

113.(leaflet篇)leaflet根据距离截取线段

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>

不同类型的 SSL 证书解释

了解不同类型的 SSL 证书&#xff1a;扩展验证 (EV)、组织验证 (OV) 和域名验证 (DV)。 查看用例及更多。 SSL/TLS 证书用于验证网站的身份并在服务器和浏览器之间创建安全连接。有许多不同类型的 SSL 证书选项可用&#xff0c;它们都有其独特的用例和价值主张。证书颁发机构 …

【项目实战合集】计算机视觉毕业设计项目怎么选,超30个经典案例供你选择...

每年到了搞毕业设计的时候&#xff0c;很多学生朋友都很头疼&#xff0c;指导老师给不了好题目&#xff0c;自己也没有什么好的想法&#xff0c;怕选的太容易了过不了&#xff0c;怕选的太难了做不出&#xff01;今年我们在计算机视觉方向出了【超过30个基于Pytorch框架】的实战…

FineReport 动态图表表格软件-函数计算组成和语法

1. 概述 1.1 版本 1.2 功能简介 在设计模板时用户需要频繁的使用公式函数&#xff0c;例如&#xff1a;求和、求个数、做判断等等。 本文介绍函数的计算组成和语法。 2. 计算语法 2.1 概览 组成部分 语法 示例 函数 函数语法详情查看对应函数&#xff1a; SUM(合同金额…

AGI意识科学每周速递 | 2022年11月第四期

AGI&意识科学每周速递 | 2022年11月第四期 心识研究院 Mindverse Research 2022-11-28 17:00 发表于上海 收录于合集#AGI&意识科学每周速递24个 本周主要内容&#xff1a;程序辅助语言模型 PAL、AI 外交官 CICERO、视觉语言图灵测试、NLP 的持续学习、胎儿的大脑皮层…

winograd卷积实践

winograd卷积基本原理参考 Winograd算法实现卷积原理_Luchang-Li的博客-CSDN博客_optimizing batched winograd convolution on gpus winograd卷积图示&#xff1a; 注意这张图里面隐藏了input和output channel。实际上每个空间维度里面还包含了batch和in/out channel维度。 …

从pom文件里面找不到对应的Maven依赖,通过下面的方法完美解决

如下&#xff0c;我想获取gson对应的依赖 第一步&#xff1a;进入引入对应包的类里面 第二步&#xff1a;进入包&#xff1a;Ctrl 左键 ctrl左键点击gson后&#xff0c;会自动跳转到这个文件夹 第三步&#xff1a;打开依赖图 按箭头点击后&#xff0c;会出现下面的依赖图 …

[附源码]Python计算机毕业设计SSM基于Java的音乐网站(程序+LW)

环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 Maven管理等…

基于java+swing+mysql北方传统民居信息管理系统

基于javaswingmysql北方传统民居信息管理系统一、系统介绍二、功能展示1.用户登陆2.用户界面3.管理员界面4.民居信息修改5.民居信息详情三、系统实现1.ManageMainFrame.java四、其它1.其他系统实现一、系统介绍 用户&#xff1a;民居信息浏览、民居详细信息 管理员&#xff1a…

CDMP证书是什么样?CDMP证书有用吗?

随着数字化经济在我国的迅速开展&#xff0c;企业越来越重视数字人才的培养&#xff0c;致使越来越多得数字人通过考取CDMP证书来证明自己的能力。而一些犹豫观望的人&#xff0c;就会问。拿到CDMP证书&#xff0c;对你们真的有用吗&#xff1f;是纸质版证书还是电子版证书&…