对collectionView熟悉又陌生,熟悉是知道有这么个控件,陌生是因为使用的少,不熟练
一见到使用collectionView,马上想到五大步:
1.创建流水布局和布局的三个属性:cell的大小,最小行间距,最小列间距
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
这里要注意一定是UICollectionViewXXXLayout的格式,之前由于不注意,直接就敲成UICollectionViewLayout,导致cell显示不出来
1.1 为什么要设置cell大小呢,而tableView却不需要设置?
每个cell的大小,这里用itemSize属性描述,tableView的cell是整行显示的,大小是默认的,可以不用设置,但是collectionView是一行显示多个cell,能显示多少个,是由cell的大小决定的,所以得设置这种变量,但是前提是我们已经规定了一行显示多少个cell,然后人为计算出来大小,最后赋值,让系统内部再去根据大小算,去显示
总结为:算出cell大小,设定布局的itemSize属性
layout.itemSize = CGSizeMake(itemWH, itemWH);
1.2 最小列间距
layout.minimumInteritemSpacing = 1;
1.3 最小行间距
layout.minimumLineSpacing = 1;
这两个间距必须设置,因为默认这两个间距是10,一行显示多少个cell,不仅有cell的高度决定,还由间距决定,算cell宽的时候是按间距为1算的,虽有得改为1
2.创建collectionView
UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 0, 300) collectionViewLayout:layout];
先设定一个初始高度让它先显示,后面再有了数据,再根据内容重新计算它的高度,如果作为tableVIew的顶部和底部视图,这里的宽度和x,y不用管,系统会帮助设定,只需要管高度就行了
3.自定义cell
用自定义cell类和xib去描述
4.注册cell
[collectionView registerNib:[UINib nibWithNibName:@"XMSquareCell" bundle:nil] forCellWithReuseIdentifier:ID];
5.遵守协议,设置代理,实现代理方法