原理
scrollView的高度(纵向滑动时)时靠内部的子控件撑起来的。咱们直接给ScrollView布局会发现失败。用层级检查器发现,ScrollVIiw的高度有问题,咱们能够选择添加一个UIView容器,约束容器的edge.equalTo(self.scrollView),和 containerView.height.mas_equalTo(self.scrollView);
往这个容器中添加控件,全部子空间相对于容器布局。
最后一个控件不要忘记 添加一个 和 容器底部的约束。不然 容器的高度是0, 里面全部的控件都没法响应手势了。由于 容器的size为0时,手势作坐标转换时响应链到达控制器时不是原来的指望的坐标了。
并且高度为0 的控件原本就是不因该存在的。布局
// [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view).offset(kNaviHeight); make.left.right.bottom.equalTo(self.view); make.width.mas_equalTo(kScreenW); make.height.mas_equalTo(kScreenH -(kNavHeight); }]; //容器 [self.scrollView addSubview:self.conatinerView]; [self.conatinerView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self.scrollView); make.width.equalTo(self.scrollView); }]; [self.subView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.someChildView.mas_bottom); make.left.right.equalTo(self.conatinerView);//左右约束 make.height.mas_equalTo(kOneLineItemHeight); make.bottom.equalTo(self.conatinerView);//这个不能忘记 }];