UICollectionView很强大,tableView可以实现的功能,collectionView都可以实现,tableView实现不了的,它也能实现,但它在使用上与tableView有两点区别 :
1.collectionView在使用的时候 必须要注册cell,
2.必须创建一个布局对象给collectionView。
// 注册cell有三种方式:
1.可以通过在storyboard中给cell设置重用标识,即自动完成注册(无需代码)
2.通过xib文件注册cell,并在注册cell时,指定重用标识(可用控件collectionViewCell创建xib)
//获得UINib对象,加载xib
UINib *nib = [UINib nibWithNibName:@"RCAppCell" bundle:nil];
RCAppCell *cell = [[nib instantiateWithOwner:nil options:nil]firstObject];
//通过xib注册cell
[self.collectionView registerNib:nibforCellWithReuseIdentifier:@"cell"];
//代码创建的时候,为了拿到itemSize给它赋值,可以强转一下
UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
// 如果cell是通过xib来创建的,cell的itemSize最好用xib中的cell的大小来动态的去设置"代码更有扩展性"
layout.itemSize = cell.frame.size;
3.通过class来注册一个cell,同时也要指定重用标识
//创建一个布局对象,默认是没有“格子(cell)”的大小和间距等属性的,是空的布局对象,在下面返回cell的时候,cell没有Frame,所以运行不会显示cell,要创建一个流布局对象
//创建流布局对象
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayoutalloc] init];
//给流布局对象的itemSize属性赋值
layout.itemSize = CGSizeMake(100, 120);
//创建collectionView的同时,必须同时设置一个布局对象collectionViewlayout
UICollectionView *testView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:layout];
testView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:testView];
// 注册cell"之前必须告诉collectView他将来所需要的cell该如何去创建"
// 通过一个类来注册的cell,通过纯代码来自定义cell进用类来注册
[testView registerClass:[RCAppCell class]forCellWithReuseIdentifier:@"cell"];