swift 如何去除collectionview滚动条
展开全部
自定义UICollectionViewController之后 如何设置UICollectionView的布局方式
我们很多时候使用UICollectionView 可能都是直接创建 UICollectionView 通过初始化的时候 传入一个布局对象的方式来使用UICollectionView
比如我们之前是这样写得:
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是只读的无法修改
这个时候 你可能会说 UICollectionViewController 里面不是有个collectionView 吗 ? 拿到collectionView 不就可以修改collectionView的布局了 吗? 当然不行了 因为我们现在时自定义了UICollectionViewController
我们在使用UICollectionViewController 控制器的 时候,也就是初始化的时候 就需要为UICollectionViewController 传入一个布局对象 不相信是吧 ! 下面给你演示下 :我们在viewDidLoad 里面修改collectionView的布局
这个时候一运行程序 你会发现报如下错误:
看到这里 你应该相信我说的了吧,也就是 必须在创建collectionViewColler的时候 传入布局对象,那么如何解决呢?
这个时候 就是考验我们对创建对象的理解了 ,我们知道 当我创建一个对象的时候 一般是使用这样的方式:
[[UICollectionViewController alloc] init]
上面的代码做了两件事:
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 写上如下代码
这样好了 允许效果如下:
我们很多时候使用UICollectionView 可能都是直接创建 UICollectionView 通过初始化的时候 传入一个布局对象的方式来使用UICollectionView
比如我们之前是这样写得:
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是只读的无法修改
这个时候 你可能会说 UICollectionViewController 里面不是有个collectionView 吗 ? 拿到collectionView 不就可以修改collectionView的布局了 吗? 当然不行了 因为我们现在时自定义了UICollectionViewController
我们在使用UICollectionViewController 控制器的 时候,也就是初始化的时候 就需要为UICollectionViewController 传入一个布局对象 不相信是吧 ! 下面给你演示下 :我们在viewDidLoad 里面修改collectionView的布局
这个时候一运行程序 你会发现报如下错误:
看到这里 你应该相信我说的了吧,也就是 必须在创建collectionViewColler的时候 传入布局对象,那么如何解决呢?
这个时候 就是考验我们对创建对象的理解了 ,我们知道 当我创建一个对象的时候 一般是使用这样的方式:
[[UICollectionViewController alloc] init]
上面的代码做了两件事:
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 写上如下代码
这样好了 允许效果如下:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询