在学习了autolayout之后,现在使用的是比较流行的Masonry的第三方开发库,使用之后,发现在手机横屏的情况下,虽然能够自适应,但是由于横屏的状态下,有一些控件跑到了
屏幕的下面,这样让人很不爽,所以想到添加scrollerView,但是设置Contentoffsize挺恶心的,还得计算总的控件的高度,这种模式的话,可以很好地解决问题,希望大家提建议
#import "Masonry.h"
@interface MeetingViewController ()<UIScrollViewDelegate>
{
UIScrollView *_scroll; // 滚动视图
UIView *_superView;
UIView *_activeView; // 添加在_superView最上面一层的View
UIView *_meetingView; // 添加在_superView最上面一层的View
UIView *_titleView;
}
@end
#pragma mark- 创建界面
- (void)createUI
{
// 1、首先是创建一个scrollerView
_scroll = [UIScrollView new];
_scroll.delegate = self;
_scroll.backgroundColor = [UIColor cyanColor];
[self.view addSubview:_scroll];
// 2、自适应
[_scroll mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view);
}];
// 3、创建一个普通的View,放在scrollerView上面,如果scrollerView 是上下滑动的话就设定_superview的宽和scrollerView宽相等。如果是左右滑动的话就将_superView的高给固定,等于scrollerView的高
_superView = [UIView new];
[_scroll addSubview:_superView];
[_superView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(_scroll);
make.height.equalTo(_scroll.mas_height);
// 如果是上下滑动的话就将他的宽设定为_scrolleView的宽
// make.width.equalTo(_scroll.mas_width);
}];
// 4、 创建两个View用来盛放两个左右滑动的页面
_activeView = [UIView new];
_meetingView = [UIView new];
_scroll.pagingEnabled = YES;
// 5、将创建的两个子view添加到_superview中,上下滑动的一个道理
[_superView addSubview:_activeView];
[_superView addSubview:_meetingView];
// 6、两个view的自适应,这里的两个view的宽是固定的,当他们的相对的位置都是写的_superview的,写成scrollerView的或者其他的,就会出现很奇妙的情况,这里的宽度无所谓
[_activeView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(_superView.mas_left);
make.top.equalTo(_superView.mas_top);
make.bottom.equalTo(_superView.mas_bottom);
make.width.equalTo(self.view.mas_width);
}];
[_meetingView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(_activeView.mas_right);
make.top.equalTo(_superView.mas_top);
make.bottom.equalTo(_superView.mas_bottom);
make.width.equalTo(_activeView.mas_width);
}];
// 7、最后一步更新_superView的最下面的边,使_superView的底部和最后的一个控件的底部距离为0,然后大功告成
[_superView mas_updateConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(_meetingView.mas_right);
}];
// 8、将两个ViewController上面的View添加到上面,我这里是将两个ViewControllerview的View分别添加到创建的最上面的一层view上面的
ActiveController *active = [[ActiveController alloc] init];
[self addChildViewController:active];
[_activeView addSubview:active.view];
[active.view mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(_activeView);
}];
MeetingController *meeting = [[MeetingController alloc] init];
[self addChildViewController:meeting];
[_meetingView addSubview:meeting.view];
[meeting.view mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(_meetingView);
}];
}