UIScrollView及其子类控件在iOS中的UI开发中最常用也是需要重点掌握的一个控件。随着项目需求中界面样式的丰富,使用单个UIScrollView或子类控件已经很难完成复杂界面的构建,往往需要多个UIScrollView来嵌套完成。在新闻、购物等APP中,我们经常会看到多个UIScrollView嵌套的身影。并且由于UIScrollView跟普通的UIView有一些区别,功能上他可以上下和左右滑动,从实现上来说他多了一个需要计算的ContentSize属性,所以使用起来就有一些难度。特别是在Masonry这种约束布局的场景下,大多数都会觉得比较困难。
方案一(简单版)
先来说一下实现的大体步骤:
-
设置 scrollView 的约束
-
约束上下左右间距为 0
-
创建一个 contentView ,设置 contentView 的约束上下左右间距为 0
宽度和 scrollView 的父视图相等
高度和 scrollView 的父视图相等,且优先级要低(这一步很重要,千万不要写错) -
将所有子控件添加到 contentView (而不是直接添加到 scrollView 上),并设置好子控件的内部约束
方案二
- (void)viewDidLoad {
[super viewDidLoad];
_containerScrollView = [[UIScrollView alloc] init];
_containerScrollView.backgroundColor = [UIColor yellowColor];
_containerScrollView.pagingEnabled = YES;
[self.view addSubview:_containerScrollView];
[_containerScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(_containerScrollView.superview);
}];
_view1 = [[UIView alloc] init];
_view1.backgroundColor = [UIColor redColor];
[_containerScrollView addSubview:_view1];
[_view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.bottom.mas_equalTo(_containerScrollView);
make.width.height.mas_equalTo(_containerScrollView);
}];
_view2 = [[UIView alloc] init];
_view2.backgroundColor = [UIColor blueColor];
[_containerScrollView addSubview:_view2];
[_view2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.right.bottom.mas_equalTo(_containerScrollView);
make.width.height.mas_equalTo(_containerScrollView);
make.left.mas_equalTo(_view1.mas_right);
}];
}
网友评论