Masonry和scrollView的结合使用,在手机横屏的状态也能看到竖屏时的内容

来源:互联网 发布:360赚钱软件 编辑:程序博客网 时间:2024/06/01 10:48


在学习了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 = [UIScrollViewnew];

    _scroll.delegate =self;

    _scroll.backgroundColor = [UIColorcyanColor];

    [self.viewaddSubview:_scroll];

    

    // 2、自适应

    [_scrollmas_makeConstraints:^(MASConstraintMaker *make) {


        make.edges.equalTo(self.view);

    }];

    

    // 3、创建一个普通的View,放在scrollerView上面,如果scrollerView是上下滑动的话就设定_superview的宽和scrollerView宽相等。如果是左右滑动的话就将_superView的高给固定,等于scrollerView的高

    _superView = [UIViewnew];

    [_scrolladdSubview:_superView];

    

    [_superViewmas_makeConstraints:^(MASConstraintMaker *make) {

        make.edges.equalTo(_scroll);

        make.height.equalTo(_scroll.mas_height);

//        如果是上下滑动的话就将他的宽设定为_scrolleView的宽

//        make.width.equalTo(_scroll.mas_width);

    }];

    

    

    // 4创建两个View用来盛放两个左右滑动的页面

    _activeView = [UIViewnew];

    _meetingView = [UIViewnew];

    _scroll.pagingEnabled =YES;

    

    // 5、将创建的两个子view添加到_superview中,上下滑动的一个道理

    [_superViewaddSubview:_activeView];

    [_superViewaddSubview:_meetingView];

    

    

   

    

    // 6、两个view的自适应,这里的两个view的宽是固定的,当他们的相对的位置都是写的_superview的,写成scrollerView的或者其他的,就会出现很奇妙的情况,这里的宽度无所谓

    [_activeViewmas_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);

    }];

    

    [_meetingViewmas_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,然后大功告成

    [_superViewmas_updateConstraints:^(MASConstraintMaker *make) {

        make.right.equalTo(_meetingView.mas_right);

    }];

    

    

    // 8、将两个ViewController上面的View添加到上面,我这里是将两个ViewControllerviewView分别添加到创建的最上面的一层view上面的

    ActiveController *active = [[ActiveControlleralloc] init];

    [selfaddChildViewController:active];

    [_activeViewaddSubview:active.view];

    [active.viewmas_makeConstraints:^(MASConstraintMaker *make) {

        make.edges.equalTo(_activeView);

    }];

    

    MeetingController *meeting = [[MeetingControlleralloc] init];

    [selfaddChildViewController:meeting];

    [_meetingViewaddSubview:meeting.view];

    [meeting.viewmas_makeConstraints:^(MASConstraintMaker *make) {

        make.edges.equalTo(_meetingView);

    }];

    

}

0 0