collectionView三种创建方式的总结
1.有三种方式来创建collection
1)通过storyBoard来创建
1.1首先删除ViewController,然后拖一个UIcollectionViewController,把它的类型改成viewController,然后再将viewController的继承关系改成uicollectionViewController
通过这种方式创建的collectionView会自动遵守代理和数据源协议,不需要手动写,可以直接写对应的数据源和代理方法
这种方式创建的View中的是动态的cell,相当于xib,需要用一个类来描述它, 并且要将这个cell的类改成描述这个cell的类的名字
在数据源方法中,获取对应的模型属性的时候,得到模型中唯一一行不是通过indexPath.row,而是通过indexPath.item来获取,返回怎么样的cell中可以不用注册,直接从重用缓存池里面取,但是要给控制器中的动态cell绑定重用标识符,要控制view中的cell的大小和布局,必须拿到collectionView的代理对象,也就是collectionViewLayout
拿到flowLayout的两种方式:
1.通过self.collectionView.collectionVIewLayout拿到
2.直接通过self.collectionViewLayout拿到
两种方式的区别在于,第二种获取方式得到的layout是只读的,所以不可以修改布局的值,所以,要想修改collectionView的布局,必须通过第一种方式获取
1.2还可以在控制器中直接拖入一个collectionView,然后可以在collectionView中的动态cell中添加要添加的控件,但是此时collectionVIew没有遵守对应的数据源和代理方法,要手动写代码来遵守,这是和1.1方法里创建collection唯一的区别
2)通过xib来创建
首先是要创建一个xib用来描述collectionView中的cell,但是在collectionView中注册cell的时候,通过读取xib来注册,
方法如下:
self.collectionView registerNib:<#(nullable UINib *)#> forCellWithReuseIdentifier:<#(nonnull NSString *)#>
只要在register中传入对应的xib的名称,并且通过xib定义的cell也要绑定重用标识符
3)通过代码来创建
直接通过新建一个collectionView,然后将collectionView添加到View中,再建一个流水布局的类(即collectionView的代理布局类),然后在ViewDidLoad中注册cell的时候通过initWithFrame:collectionViewLayout:这个方法设置他的流水布局的对象,这样就可以通过这个创建的布局对象来设置collectionView的布局