我们很多时候使用UICollectionView 可能都是直接创建 UICollectionView,通过初始化的时候传入一个布局对象的方式来使用UICollectionView
比如我们之前是这样写得:
UICollectionViewFlowLayo
ut *layout = [[UICollectionViewFlowLayo
ut alloc] init];
UICollectionView *collection = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
但是有时候这样的方式可能达不到我们的需求,比如我们想利用collectionView 创建一个app的新特性的引导界面这个时候上面这种方式就不适用这个时候 我们就需要自定义UICollectionViewControll
er
但是这样的话问题就来了,当我们自定义了UICollectionViewControll
er 就无法设置 UICollectionView的布局样式了,因为当我们继承了 UICollectionViewControll
er 他内部的UICollectionViewLayout是只读的无法修改
这个时候你可能会说 UICollectionViewControll
er 里面不是有个collectionView 吗 ?拿到collectionView 不就可以修改collectionView的布局了吗?当然不行了因为我们现在时自定义了UICollectionViewControll
er
我们在使用UICollectionViewControll
er 控制器的时候,也就是初始化的时候 就需要为UICollectionViewControll
er 传入一个布局对象,不相信是吧?! 下面给你演示下 :我们在viewDidLoad 里面修改collectionView的布局
这个时候一运行程序 你会发现报如下错误:
看到这里 你应该相信我说的了吧,也就是必须在创建collectionViewColler的时候传入布局对象,那么如何解决呢?
这个时候 就是考验我们对创建对象的理解了,我们知道 当我创建一个对象的时候 一般是使用这样的方式:
[[UICollectionViewControll
er
alloc] init]
上面的代码做了两件事:
1.在堆区为UICollectionViewControll
er开辟一块内存空间
2.调用对象的init方法 做一些初始化的操作
讲到这里聪明的你一定知道怎么做了, 没错 ,就是在 init方法 上面 做手脚 ,我们可以在init方法里面设置UICollectionViewControll
er 的布局方式
下面是我的做法:
这样我们一创建 UICollectionViewControll
er 的时候默认就会由流水布局的样式了
另外附上在viewdidload里边注册cell的几种方法,仅供参考使用:
如果采用如下3种方式,为UICollectionViewControll
er(UITableViewController)注册了原形Cell,系统会用注册的cell作为显示用的cell和可重用cell,一旦缓冲区中不存在可重用cell,系统会使用注册的原形Cell新实例化一个Cell供程序使用!