iOS UICollectionView
来源:互联网 发布:mysql group by 排序 编辑:程序博客网 时间:2024/06/05 05:06
前言
UICollectionView 是iOS控件的一种,在iOS6.0之后出现的。这个控件用的比较少,其作用和用法和UITableView很相似,一般用来实现瀑布流的布局。
用法
一、使用步骤
1、首先需要创建一个流式布局管理器,布局管理器有两种类型:水平布局和垂直布局;
UICollectionViewScrollDirectionVertical //垂直平布局 UICollectionViewScrollDirectionHorizontal //水平布局
2、创建一个UICollectionView 和一个自定义的UICollectionViewCell,并使两种关联起来。
[collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"cellid"];
3、实现UICollectionView的代理方法。
二、代码示例
1、ViewController.m 中的代码:
#import "ViewController.h"#import "CollectionViewCell.h"@interface ViewController ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; //创建一个流式布局管理器 UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; //垂直布局 layout.scrollDirection = UICollectionViewScrollDirectionVertical; //设置每个item的大小 layout.itemSize = CGSizeMake(self.view.frame.size.width/3, self.view.frame.size.width/3); //设置行间距 layout.minimumInteritemSpacing = 0; //设置列间距 layout.minimumLineSpacing = 0; UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:layout]; collectionView.delegate = self; collectionView.dataSource = self; collectionView.backgroundColor = [UIColor whiteColor]; //关联UICollectionView 和 UICollectonViewCell [collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"Identifier"]; [self.view addSubview:collectionView];}#pragma mark - UICollectionViewDataSource//返回分区个数-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return 1;}//返回每个分区的item个数-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 10;}//返回每个item-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ CollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Identifier" forIndexPath:indexPath]; cell.title.text = [NSString stringWithFormat:@"标题%ld",(long)indexPath.row]; return cell;}#pragma mark - UICollectionViewDelegate//点击某个item- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"你点击了%ld",(long)indexPath.row);}@end
2、自定义UICollectionViewCell中的代码:
import <UIKit/UIKit.h>@interface CollectionViewCell : UICollectionViewCell@property (nonatomic, strong) UILabel *title;@end
#import "CollectionViewCell.h"@implementation CollectionViewCell- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { _title = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, self.frame.size.width, 20)]; _title.textAlignment = NSTextAlignmentCenter; [self addSubview:_title]; self.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1]; } return self;}@end
3、效果图如下:
拓展
1、行间距和列间距的设置
//设置行间距layout.minimumInteritemSpacing = 0; //设置列间距layout.minimumLineSpacing = 0;
这两句代码如果不写,系统会默认的把行间距和列间距设置为10。
2、设置item的大小
系统提供了两种方法去设置item的大小
(1)通过itemSize属性设置,这种方法设置的所有item大小都是一样的
//设置每个item的大小layout.itemSize = CGSizeMake(self.view.frame.size.width/3, self.view.frame.size.width/3);
(2)通过UICollectionViewDelegateFlowLayout委托方法设置,这种方法可以设置每个item的大小不一样
#pragma mark - UICollectionViewDelegate//定义每个Item 的大小- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ return CGSizeMake(self.view.frame.size.width/3, self.view.frame.size.width/3);}
3、设置UICollectionView的边缘边距
//设置UICollectionView的边缘-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ return UIEdgeInsetsMake(0, 0, 0, 0);}
这个需要和item大小一起设置,才能达到想要的效果。
4、添加头部和尾部
需要先注册头部和尾部视图
//注册collectionView的头部视图 [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"UICollectionViewHeader"]; //注册collectionView的尾部视图 [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"UICollectionViewFooter"]; //注册尾视图
设置头部和尾部的具体内容
//创建头视图- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { NSString *reuseIdentifier; if ([kind isEqualToString:UICollectionElementKindSectionFooter ]){ reuseIdentifier = @"UICollectionViewFooter"; }else{ reuseIdentifier = @"UICollectionViewHeader"; } UICollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; if ([kind isEqualToString:UICollectionElementKindSectionHeader]){ UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 20)]; label.text = @"头部"; [view addSubview:label]; }else if ([kind isEqualToString:UICollectionElementKindSectionFooter]){ UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 20)]; label.text = @"尾部"; [view addSubview:label]; } return view;}
设置头部和尾部的高度
//设置section头视图的大小- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { return CGSizeMake(0, 20);}//设置section尾视图的大小- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section { return CGSizeMake(0, 20);}
Demo下载
0 0
- IOS UICollectionView
- iOS- UICollectionView
- iOS UICollectionView
- iOS UICollectionView
- IOS UICollectionView
- iOS UICollectionView
- iOS UICollectionView
- iOS UICollectionView
- ios UICollectionView 的用法
- ios UICollectionView的使用
- iOS 手写代码UICollectionView
- iOS开发- UICollectionView详解
- UICollectionView使用 - iOS开发
- iOS 手写代码UICollectionView
- iOS 手写代码UICollectionView
- IOS UICollectionView详解+实例
- ios UICollectionView的使用
- iOS UICollectionView简单使用
- linux断开连接后进程死掉的问题
- Nginx配置文件(nginx.conf)配置详解(转载)
- 一致性hash算法
- Spring-IOC-学习笔记(1)
- 关于ioutil.ReadAll()的阻塞问题
- iOS UICollectionView
- 集成支付宝钱包支付iOS SDK的方法与经验
- flume组件汇总 (source, channel, sink)
- 第一行代码Android学习(六)
- poj-1005-I Think I Need a Houseboat
- Spring MVC 解读——<mvc:annotation-driven/>
- 非常经典的C++ 引用计数技术及智能指针的简单实现
- SDUT2138图结构练习——BFSDFS——判断可达性
- 08、canvas标签之案例-钟表