6.UICollectionViewController和UITableViewController之间的异同

潘胤
2023-12-01

最近在项目中会用到UICollectionViewController,所以将它与常用的UITableViewController做一个对比:

        两者在使用上大致相同,在初始化之后,都会设置相应的数据源和代理,通过重写相应的数据源和代理方法来进行具体操作,现在着重说一下它们的一些小不同:

1.初始化

       UITableViewController在初始化后,只要实现它的数据源和代理方法,就可以直接展现出来。而UICollectionViewController推荐使用的是initWithCollectionViewLayout:方法,该中会传入一个layout,只有有了这个layout才能显示出来。或者重写init方法,在init方法中设置它的布局方式,也就是layout.

    这个layout可以使用继承自UICollectionViewLayout的两个子类 :UICollectionViewFlowLayout 和 UICollectionViewTransitionLayout。
    这里贴一下常用的流水布局的代码:

    

//1.创建layout
          // 1.1创建流水布局
        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
          // 1.2设置每个格子的尺寸
        layout.itemSize = CGSizeMake(thumbnailWidth, thumbnailWidth);
          // 1.3设置整个collectionView的内边距
        CGFloat paddingY = 20;
        layout.minimumInteritemSpacing = minimumItemspace;
        layout.sectionInset = UIEdgeInsetsMake(0, minimumLinespace, paddingY, minimumLinespace);
          // 1.4设置每一行之间的间距
        layout.minimumLineSpacing = minimumLinespace;


2.重用

      两个里面的cell都可以进行重用,但是UICollectionViewCell在初始化时不会传入identifier ,这会导致cell没有identifier可以用于在缓存池中寻找,所以我们需要在ViewDidload方法中注册一个cell,这时它会传入一个identifier,当缓存池中找不到cell时,系统会用注册的cell自动创建一个供使用。如果要注册自己写得类,而该类的视图是从xib文件中生成的,必须注册nib文件。方法如下:

     [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];
<pre name="code" class="objc">     UINib *nib = [UINib nibWithNibName:@"CYLProductItem" bundle:nil];
     [self.collectionView registerNib:nib forCellWithReuseIdentifier:reuseIdentifier];
 


3.index

       在UITableViewController中,index取出相应组合组中行的两个属性是section和row,而在UICollectionViewController中,index对应的是section和item.

       


 类似资料: