1.關(guān)于 collectionView 的個(gè)人理解(如果想了解詳細(xì),可以去查看官方文檔)
1.1.collectionView 是一個(gè)比較特殊的控件, 它繼承于 scrollView, 擁有了滑動(dòng)功能,又擁有類似與 tableView 的緩存池屬性(方便與循環(huán)利用),而它的子控件的布局又不會(huì)像 tableView 那樣的死板(只能橫向布局).
1.2.可以認(rèn)為 collectionView 的出現(xiàn)就是為了解決圖片的滾動(dòng),以及循環(huán)資源消耗的問題.其出現(xiàn)應(yīng)該比 tableView 晚.
- 關(guān)于 collectionView 的基本使用問題
2.1.上面提到 collectionView 可以自由的設(shè)置子控件的布局,沒有拘束.那么怎么一個(gè)自由法呢,不可能你不設(shè)置吧,它可沒有那么智能(⊙o⊙)哦.
2.1.1 請(qǐng)看下面的代碼.
// 設(shè)置布局因素 : 流水布局(比較常用的布局)
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
// 創(chuàng)建 collectionView 初始化時(shí)加入布局
UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:flowLayout];
// 只是為了驗(yàn)證 控件已經(jīng)加到 view 上 ()
collectionView.backgroundColor = [UIColor redColor];
[self.view addSubview:collectionView];
2.2. 關(guān)于(流水)布局因素的一些屬性
// 字面意思是最小的線的空間, 其實(shí)是指橫向距離(行與行)
@property (nonatomic) CGFloat minimumLineSpacing;
// 豎向距離(列與列)
@property (nonatomic) CGFloat minimumInteritemSpacing;
// 項(xiàng)目的大小,其實(shí)就是 每個(gè)元素的大小,也就是每個(gè) cell 的大小
@property (nonatomic) CGSize itemSize;
// 估算cell大小
@property (nonatomic) CGSize estimatedItemSize
// 滾動(dòng)方向
@property (nonatomic) UICollectionViewScrollDirection scrollDirection;
// 頭部相關(guān)距離
@property (nonatomic) CGSize headerReferenceSize;
// 尾部相關(guān)距離
@property (nonatomic) CGSize footerReferenceSize;
// 每一組的內(nèi)邊距
@property (nonatomic) UIEdgeInsets sectionInset;
2.3 關(guān)于 collectionView 的內(nèi)部?jī)?nèi)容的顯示(相似與 tableView 有代理,以及數(shù)據(jù)源)
// 一般是將 控制器 設(shè)置為 數(shù)據(jù)源, 也就是在控制器中處理各種數(shù)據(jù).
collectionView.dataSource = self;
// 關(guān)于 cell 的注冊(cè)
[collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:collectionCellID];
// 數(shù)據(jù)源方法(和 tableView 真的是 一模一樣呀)
// 返回每一組的項(xiàng)目數(shù)
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 20;
}
// 返回每一個(gè) item 的 cell
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
// cell 從緩存池中取, 不能自己創(chuàng)建, 只能通過注冊(cè). 自己創(chuàng)建沒有重用 ID
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:collectionCellID forIndexPath:indexPath];
// if (cell == nil) {
// cell = [[UICollectionViewCell alloc]init];
// }
cell.backgroundColor = [UIColor yellowColor];
return cell;
}