UICollectionView使用笔记

原创 2016年08月29日 20:36:47
一、与UITableView的相同点与不同点

1、相同点

1)都是显示集合数据

2)都有单元格重用机制,在使用之前都要注册cell(原型cell除外)

3)都需要三个数据源代理方法(组数、行数(item数)、每一个单元格)

2、不同点:

1)UICollectionView不知道如何布局单元格,在实例一个UICollectionView的时候,要传入布局信息。详细见布局对象的介绍。

3、UICollectionView将其单元格的位置,大小和外观的控制权委托给一个单独的布局对象。通过提供一个自定义布局对象,你几乎可以实现任何你能想象到的布局。

4、一切布局相关的设置请到布局对象里设置。


二、UICollectionViewLayout对象介绍

1、在创建UICollectionView的时候必须传入布局对象,但是不能传入UICollectionViewLayout对象,否则不会显示单元格,因为UICollectionViewLayout不具有具体的布局效果,只是布局对象的抽象基类。

2、布局对象必须继承自UICollectionViewLayout或者UICollectionViewFlowLayout。

3、UICollectionViewLayout有一个属性:UICollectionView *collectionView,获取当前需要布局的UICollectionView。

三、UICollectionViewFlowLayout

1、FlowLayout有几个常用的属性:

	CGFloat minimumLineSpacing;//最小行间距
	CGFloat minimumInteritemSpacing;//最小item间距
	CGSize itemSize;//item的大小
	CGSize estimatedItemSize //估计item的大小
	UICollectionViewScrollDirection scrollDirection; //滚动方向
	CGSize headerReferenceSize;//组头大小。设置大小时,只有高度起作用
	CGSize footerReferenceSize;//同上
	UIEdgeInsets sectionInset;//组内边距
	BOOL sectionHeadersPinToVisibleBounds//组头悬停
        BOOL sectionFootersPinToVisibleBounds//组尾悬停


2、prepareLayout方法(继承自prepareLayout)
这个方法使用注意:
//每次布局之前会调用一次
// The collection view calls -prepareLayout once at its first layout as the first message to the layout instance.

//当时布局失效后重新布局的时候回调用一次
// The collection view calls -prepareLayout again after layout is invalidated and before requiring the layout information.

//重写这个方法必须调用 super 方法
// Subclasses should always call super if they override.

系统在第一次实例化一个布局对象时,会调用prepareLayout,在使用prepareLayout时,首先要调用[super prepareLayout]。
四个边距、单元格大小、滚动方向等等在布局对象中设置。



     四个间距:
     1. contentInset:属于scrollView的内边距

     2. sectionInset:属于section(组)的内边距

     3. LineSpacing:属于两行之间的间距,换行时候才有

     4. InteritemSpacing:属于两个item之间的间距

minimumLineSpacing:最小行间距,默认值是10。最小行间距的设置只是设置一个间距的最小值,UICollectionView在布局的时候会根据实际情况调整间距大小,前提是>=minimumLineSpacing

四、自定义UICollectionViewCell的三种方法

1、纯代码方法,继承自UICollectionViewCell,重写initWithFrame方法

2、xib方法:使用UICollectionViewCell控件。要设置重用id。注册时使用registerNib。

3、原型cell。

当视图从storyboard 或 xib 文件创建的时候,会调用awakeFromNib 方法,在这个方法里面,可以创建子控件


五、设置、自定义组头组尾方法
1、代码中设置组头组尾

	//1. 使用之前要注册组头、组尾,注册的时候注意要注册UICollectionReusableView或其子类。并且使用系统提供的常量注册组头或组尾的类型:UICollectionElementKindSectionHeader |  UICollectionElementKindSectionFooter
	
	[collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:viewId];
	
	[collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:viewId];
	
	//2. 设置组头、组头的尺寸,高度起作用
	
	flowLayout.headerReferenceSize = CGSizeMake(100, 100);
	flowLayout.footerReferenceSize = CGSizeMake(10, 10);
	
	//3. 设置是否 “钉”顶部或底部
	
	flowLayout.sectionHeadersPinToVisibleBounds = YES;
	flowLayout.sectionFootersPinToVisibleBounds = YES;
	
	//4. 重写代理方法
	
	// 不管获取的还是组头还是组尾都会调用这个方法
	- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
	    if (kind == UICollectionElementKindSectionHeader) {
	        HMheaderView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headId forIndexPath:indexPath];
	        headView.backgroundColor = [UIColor whiteColor];
	        return headView;
	    }
	    else{
	        UICollectionReusableView *footView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footId forIndexPath:indexPath];
	        footView.backgroundColor = [UIColor blueColor];
	        return footView;
	    }
}


2、自定义组头组尾

1) 纯代码:继承自UICollectionReusableView

2)xib:拖一个UICollectionReusableView,设置重用ID

3、原型

iOS sectionFootersPinToVisibleBounds 导致iOS9.0系统之前的用户闪退

最近个别用户反馈有个页面会出现闪退问题 用户相同处都是八点几的系统(iOS8.1  iOS8.4) 这应该是某个方法在iOS8系统不存在 果不其然 找到了一个iPhone5 iOS8.4 ...
  • xy_26207005
  • xy_26207005
  • 2017年05月17日 14:48
  • 634

UICollectionView使用笔记

一、与UITableView的相同点与不同点 1、相同点 1)都是显示集合数据 2)都有单元格重用机制,在使用之前都要注册cell(原型cell除外) 3)都需要三个数据源代理方法(组数、行数(ite...
  • yuanjilai
  • yuanjilai
  • 2016年08月29日 20:36
  • 576

OCiOS开发:集合视图 UICollectionView

简介UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableV...
  • Hierarch_Lee
  • Hierarch_Lee
  • 2015年08月27日 22:59
  • 9142

使用UICollectionView和UITableView混合布局,完成简单天气demo

天气Demo最终效果如下: UICollectionView和UITableView是很类似的~ 上一节我做的UITableView学好的话,这节的混合布局就会很容易。 1.首先再做布局...
  • Sara_Tuan
  • Sara_Tuan
  • 2015年12月11日 16:03
  • 1309

UICollectionView的使用【附demo】

ViewController.h #import @interface ViewController : UIViewController @property (strong, nonatomi...
  • u011439689
  • u011439689
  • 2014年08月18日 14:37
  • 5166

UICollectionView设置header悬浮效果

在iOS9.0后UICollectionView的头部视图也能像tableView的header一样出现悬浮挂住的效果。 UICollectionViewFlowLayout *flowLayout ...
  • jacob_ios
  • jacob_ios
  • 2016年10月18日 22:19
  • 2283

MJRefresh的下拉刷新,UICollectionView,UItableview

1.将MJRefresh文件夹整个导入所需的工程中。 2.文件夹中的MJRefresh.bundle--->arrow@2x.png 图片可自行替换,这个会在刷新过程中显示。 3.可以在MJRef...
  • maiwc
  • maiwc
  • 2015年08月16日 11:29
  • 3437

iOS开发 UICollectionView详解+实例

文章来源:http://www.cnblogs.com/ios8/p/iOS-UICollectionView.html 本章通过先总体介绍UICollectionView及其常用方法,再结合一...
  • sevenquan
  • sevenquan
  • 2015年12月31日 12:05
  • 433

iOS 深入学习UICollectionView

前言: 这是博主在学习旧知识笔记中的一篇, 谁叫咱入门晚呢, 学习的过程中, 不会的知识, 就是因为我们年轻而已(囧~) 我总是这样安慰自己(逃~), 所以我们需要补充一下”错过”的重要的东西, 下面...
  • sinat_30162391
  • sinat_30162391
  • 2016年09月07日 19:38
  • 887
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UICollectionView使用笔记
举报原因:
原因补充:

(最多只允许输入30个字)