[iOS]UIScrollView 使用 Masonry 代码添加约束实现滚动

法一:不使用过渡视图

    UIScrollView *scrollView = [[UIScrollView alloc] init];
    [self.view addSubview:scrollView];
    [scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(navBar.mas_bottom);
        make.left.mas_offset(0);
        make.right.mas_offset(0);
        make.bottom.mas_offset(0);
    }];
    
    for (int i = 0; i < 3; i++) {
        UITableView *_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-SCREEN_TOP_HEIGHT) style:UITableViewStyleGrouped];
        _tableView.tag = 600 + i;
        _tableView.delegate = self;
        _tableView.dataSource = self;
        _tableView.hidden = NO;
        _tableView.backgroundColor = [UIColor blueColor];
        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        [scrollView addSubview:_tableView];

        _tableView.estimatedSectionHeaderHeight=30.1;
        _tableView.estimatedSectionFooterHeight=.1;
        _tableView.estimatedRowHeight = UITableViewAutomaticDimension;
        if (@available(iOS 11.0, *)){
            _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        }
        [_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.mas_offset(0);
            make.left.mas_offset(i*SCREEN_WIDTH);
            //注意:宽高必须给出
            make.width.mas_equalTo(SCREEN_WIDTH);
            make.height.mas_equalTo(scrollView);
        }];
        
        if (i==2) {
            [scrollView mas_updateConstraints:^(MASConstraintMaker *make) {
                make.right.equalTo(_tableView.mas_right);
            }];
        }
    }

法二:使用过渡视图

    UIScrollView *scrollView = [[UIScrollView alloc] init];
    [self.view addSubview:scrollView];
    [scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(navBar.mas_bottom);
        make.left.mas_offset(0);
        make.right.mas_offset(0);
        make.bottom.mas_offset(0);
    }];

    UIView *contentView = [[UIView alloc] init];
    contentView.backgroundColor = [UIColor blueColor];
    [scrollView addSubview:contentView];
    
    [contentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.right.top.bottom.mas_offset(0);
    }];
    
    
    for (int i = 0; i < 3; i++) {
        UITableView *_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT-SCREEN_TOP_HEIGHT) style:UITableViewStyleGrouped];
        _tableView.tag = 600 + i;
        _tableView.delegate = self;
        _tableView.dataSource = self;
        _tableView.hidden = NO;
        _tableView.backgroundColor = [UIColor blueColor];
        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        [scrollView addSubview:_tableView];

        _tableView.estimatedSectionHeaderHeight=30.1;
        _tableView.estimatedSectionFooterHeight=.1;
        _tableView.estimatedRowHeight = UITableViewAutomaticDimension;
        if (@available(iOS 11.0, *)){
            _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        }
        [_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.mas_offset(0);
            make.left.mas_offset(i*SCREEN_WIDTH);
            make.width.mas_equalTo(SCREEN_WIDTH);
            make.height.mas_equalTo(scrollView);
        }];
        
        if (i==2) {
            [contentView mas_updateConstraints:^(MASConstraintMaker *make) {
                make.right.mas_equalTo(_tableView.mas_right);
            }];
        }
    }

总结:其实这两种方法一样的,核心就是给出scrollView位置,然后再次设置左边界(左右滑动)或者下边界(上下滑动),过渡视图或者子元素一定要有一个是固定宽高

你可能感兴趣的:([iOS]UIScrollView 使用 Masonry 代码添加约束实现滚动)