背景
在写商城项目的时候需要用到UICollectionView。UICollectionView跟UITableView非常的相似,如果你学过UITableView再学这个就很快啦。以我自己写的代码作为例子,第一次用遇到了很多问题在这里跟大家分享一下。
UICollectionView
-
布局
如果你的当前页面不是继承与UICollectionViewController时,你需要声明collectionView
image.png
CollectionView是由单元格构成的,这个时候我们要用到UICollectionViewFlowLayout。
流动布局:一行排满,自动排到下行,继承自UICollectionViewLayout。
初始化collectionView的时候,一定要给他设置这个属性,否者不会显示。
image.png
这个时候我们就可以开始写布局了
1.UICollectionViewFlowLayout
2.设置CollectionView的显示范围
3.将CollectionView的视图添加到主视图上
image.png -
注册
UITableView和UICollectionView最大的不同就是CollectionView需要注册,UITableView不需要。
image.png -
UICollectionView必须定义的代理方法
1 UICollectionViewDataSource
2 UICollectionViewDelegateFlowLayout(理论上我们还要定义UICollectionViewDelegate,但是UICollectionViewDelegateFlowLayout就是继承于UICollectionViewDelegate,所以这里可以不做定义。)
image.png
我们可以点进去看下那些是必须要实现的方法和可选的方法。
UICollectionViewDataSource:
numberOfItemsInSectionView顾名思义就是你需要多少的Item。
cellForItemAtIndexPath是用来显示Item的内容。
UICollectionViewDelegateFlowLayout:和 UICollectionViewDelegate:
虽然这些都是可选的但是在实际使用的过程中 我们经常会用到这些。根据不同的需求调用其他方法。例如,sizeForItemAtIndexPath:设置item的大小 referenceSizeForHeaderInSection:头部的大小 referenceSizeForFooterInSection:尾部的大小。(头部尾部的大小必须设置才能显示出来)。
-
可重用标识符
在实际开发过程中我们会需要collectionView创建很多cell来存放数据,但是手机的屏幕和内存都是有限的。每需要一个cell就创建一个cell的会占用大量内存也会造成App闪退。所以我们需要重复利用那些看起来差不的的cell。当一个cell完全消失在屏幕中,这个cell就会被移除,后面再显示的cell若是跟上一个cell仅仅是数据不同我们就可以重复利用上一个cell。但是我们怎么区分这个cell是不是一样的呢?这个时候我们就需要给每个不同的cell一个标识符,称之为可重用标识符。(每个section的头部尾部也是同样的道理可以重复利用)
image.png -
创建CollectionView的头部和尾部
1.header和footer一定要继承自UICollectionReusableView。
2.若是用xib方式创建的,需要添加一个Collection Reusable View控件。
3.header和footer也需要注册及创建可重用标识符。
4.实现header和footer的数据源方法 ViewForSupplementofkind: 代理方法
5.实现UICollectionViewFlowLayout中的referenceSizeForHeaderInSection:和referenceSizeForFooterInSection:方法。
掌握了上面的要点已经可以写出一个大概的界面了。
image.png -
自定义cell
如何创建一个自定义cell?以xib方式为例(纯代码比较不熟)
1.创建继承于UICollectionViewCell的文件,同时创建一个xib文件,xib与文件同名。
image.png
2.将xib与文件进行关联
image.png
3.添加可重用标识符
image.png
4.在空白的xib文件添加一个Collection Reusable View控件
image.png
5.然后就可以在这个Collection Reusable View 设计你需要的样式。
但是对于iPhone手机来说屏幕大小都是不一样的,就这样拖控件对于最后的显示会有很大的不同。这个时候我们要对这个cell内部的控件添加约束。
image.png
总结
UICollectionView和UITableView一样是日常开发过程中一个非常常用的东西,也是一个非常强大的东西。
从一无所知的摸索到现在能显示出来真的是花了不少时间进了不少大坑。仓促的写完了这篇,现在还没有用过UICollectionView的看来可能不是帮助很大,后面会写一个简单的demo放上去。