自定義UICollectionViewController以後 如何設置UICollectionView的佈局方式

咱們不少時候使用UICollectionView 可能都是直接建立 UICollectionView   經過初始化的時候  傳入一個佈局對象的方式來使用UICollectionViewapp

好比咱們以前是這樣寫得:ide

1  UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
2     
3     UICollectionView *collection = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];

 

可是有時候這樣的方式 可能達不到咱們的需求  ,好比咱們想利用collectionView  建立一個app的新特性的引導界面  這個時候上面這種方式就不適用  這個時候 咱們就須要自定義UICollectionViewController佈局

可是這樣的畫 問題就來了  ,當咱們自定義了UICollectionViewController 就沒法設置 UICollectionView的佈局樣式了 ,由於 當咱們繼承了 UICollectionViewController  他內部的UICollectionViewLayout是隻讀的沒法修改ui

這個時候 你可能會說  UICollectionViewController  裏面不是有個collectionView  嗎  ? 拿到collectionView 不就能夠修改collectionView的佈局了 嗎?   固然不行了  由於咱們如今時自定義了UICollectionViewControlleratom

咱們在使用UICollectionViewController 控制器的 時候,也就是初始化的時候 就須要爲UICollectionViewController  傳入一個佈局對象   不相信是吧 !  下面給你演示下 :咱們在viewDidLoad  裏面修改collectionView的佈局spa

這個時候一運行程序 你會發現報以下錯誤:code

看到這裏 你應該相信我說的了吧,也就是 必須在建立collectionViewColler的時候 傳入佈局對象,那麼如何解決呢?orm

這個時候 就是考驗咱們對建立對象的理解了 ,咱們知道 當我建立一個對象的時候 通常是使用這樣的方式: 對象

[[UICollectionViewController  alloc] init]blog

上面的代碼作了兩件事:  

1.在堆區爲UICollectionViewController開闢一塊內存空間

2.調用對象的init方法 作一些初始化的操做

講到這裏 聰明的你 必定知道怎麼作了,  沒錯 ,就是在 init方法 上面 作手腳    ,咱們能夠在init方法裏面設置UICollectionViewController 的佈局方式

下面是個人作法:

 1 - (instancetype)init
 2 {
 3     //建立流水佈局對象
 4     UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
 5     layout.itemSize =  [UIScreen mainScreen].bounds.size;
 6     
 7     //設置水平滾動
 8     layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
 9     
10     //    // 設置cell之間間距
11     layout.minimumInteritemSpacing = 0;
12     //    // 設置行距
13     layout.minimumLineSpacing = 0;
14     
15     return [super initWithCollectionViewLayout:layout];
16 }

 

這樣咱們一建立 UICollectionViewController  的時候 默認就會由流水佈局的樣式了

其餘的一些設置,下面粘貼出我本身寫的所有代碼

面是自定義SYCollectionViewController.m文件裏面的所有代碼 
 1 /**
 2 下面是自定義SYCollectionViewController.m文件裏面的所有代碼
 3 */
 4 
 5 #import "SYCollectionViewCell.h"
 6 #import "SYCollectionViewController.h"
 7 
 8 @interface SYCollectionViewController ()
 9 
10 @end
11 
12 @implementation SYCollectionViewController
13 
14 - (instancetype)init
15 {
16     //建立流水佈局對象
17     UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
18     layout.itemSize =  [UIScreen mainScreen].bounds.size;
19     
20     //設置水平滾動
21     layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
22     
23     //    // 設置cell之間間距
24     layout.minimumInteritemSpacing = 0;
25     //    // 設置行距
26     layout.minimumLineSpacing = 0;
27     
28     return [super initWithCollectionViewLayout:layout];
29 }
30 
31 static NSString *ID = @"cell";
32 - (void)viewDidLoad
33 {
34     [super viewDidLoad];
35 
36     self.collectionView.pagingEnabled = YES;
37     
38     //隱藏水平滾動條
39     self.collectionView.showsHorizontalScrollIndicator = NO;
40     
41     //取消彈簧效果
42     self.collectionView.bounces = NO;
43     
44     //註冊cell
45     [self.collectionView registerClass:[SYCollectionViewCell class] forCellWithReuseIdentifier:ID];
46     
47 }
48 
49 
50 /**
51  *  一共有多少組數據
52  */
53 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
54 {
55     return 1;
56 }
57 
58 /**
59  *  每一組有多少條數據
60  */
61 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
62 {
63     return 4;
64 }
65 
66 /**
67  *  每個cell的顯示樣式
68  *
69  */
70 - (UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
71 {
72     SYCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ID forIndexPath:indexPath];
73     
74     cell.image  = [UIImage imageNamed:[NSString stringWithFormat:@"guide%ldBackground",indexPath.item+1]];
75     
76     NSLog(@"%@",[NSString stringWithFormat:@"guide%ldBackground",indexPath.item+1]);
77     
78     return cell;
79 }
80 @end
面是自定義cell ,SYCollectionViewCell.h文件裏面的所有代碼 
1 #import <UIKit/UIKit.h>
2 
3 @interface SYCollectionViewCell : UICollectionViewCell
4 /**cell顯示的圖片**/
5 @property(nonatomic,strong)UIImage *image;
6 @end
 

面是自定義cell ,SYCollectionViewCell.m文件裏面的所有代碼

 

 1 #import "SYCollectionViewCell.h"
 2 
 3 @interface SYCollectionViewCell ()
 4 
 5 /**內部imageView控件**/
 6 @property(nonatomic,weak)UIImageView *imageView;
 7 
 8 @end
 9 
10 @implementation SYCollectionViewCell
11 /**
12  *  重寫imageView的getter方法  在裏面作添加imageView到cell上面的操做
13  *
14  */
15 - (UIImageView *)imageView
16 {
17     if (!_imageView) {
18         //建立一個新的UIImageView 對象
19         UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.bounds];
20         
21         //賦值給成員變量
22         _imageView = imageView;
23         
24         //添加到cell中
25         [self.contentView addSubview:imageView];
26     }
27     return _imageView;
28 }
29 
30 /**
31  *  重寫setter方法 爲imageView賦值
32  *
33  */
34 - (void)setImage:(UIImage *)image
35 {
36     _image = image;
37     //爲imageView賦值
38     self.imageView.image = image;
39 }
40 
41 
42 @end

 

 

如何使用了 ,爲了操做簡單  我就直接設置了窗口的根控制器爲UICollectionViewController  控制器 因此在AppDelegate 寫上以下代碼

這樣好了  容許效果以下:

相關文章
相關標籤/搜索