iOS中可以滚动的视图有UIScrollView、UITableView、UICollectionView
其中UITableView和UICollectionView是有重用机制的,UIScrollView没有。UITableView中的cell的布局计算是系统给计算的,而UICollectionView不是系统给计算的,他是依靠一个布局参数进行布局计算的,所以在创建UICollectionView的时候,不要直接init,而是用附带布局参数的初始化方法。否则是会报错的
这次小事例的图片
A:基本用法和tableView大相径庭,直接上图片吧,一点小笔记也都在代码里了。
注意:要想改变cell的尺寸、位置或者一些效果等,都是需要通过修改布局的属性来设置。
CollectionView自定义布局方法
B:需求:继续上面的例子,cell滚动的时候,从屏幕边缘到屏幕中间,越来越大。
当系统方法不能满足需要的效果的时候,我们就需要自定义布局了。 自定义布局,只需要了解5个方法,重写下面这五个方法,来实现自己想要的效果。笔记已经记录在代码中了。
注意:重写的时候要先调用super方法。
1.2
3.UICollectionViewLayoutAttributes类装载的就是cell的布局信息,尺寸等数据。还有对于传入的参数rect,如果只想拿到显示在视野的cell,进行布局,那么可以传入self.collectionView.bounds参数,因为bounds就是内容相对于可视范围的尺寸,传入collectionView当前的bounds,就相当于将可视范围内的cell拿到了(有疑惑就看一下bounds的笔记)。如果想拿到所有的cell,就传入最大值,如图片中一样。
4.想要在cell滚动的时候改变cell的布局,要将返回值改为YES,持续刷新。
返回值改为yes后,滚动collectionView视图的打印如下图
5.这个方法简而言之,就是控制cell的定位(位置)。
自定义布局的几个方法介绍完成后,就继续完善小例子,让处于屏幕中间的cell放大,两边的cell缩小。
首先将持续刷新的那个方法(第四个方法)返回YES。然后在第三个方法中给cell计算布局数据。如图
因为是持续刷新布局,我们调用父类方法,拿到出现在视野中的cell的布局信息,存在数组中。之后遍历数组,写缩放的小算法,然后给UICollectionViewLayoutAttributes对象的transform属性赋值就轻松实现了这个效果。
C:需求:距离屏幕中心最近的cell自动居中。这就要用到上面介绍的第五个方法了,定位。直接上代码了。