当UIScrollView碰上AutoLayout的时候,经常出现一个令人尴尬的问题,就是我们的UIScrollview不能滚动了,今天我们就主要解决这个问题。
UIScrollView是AutoLayout中一个特殊的View。在AutoLayout中,UIScrollview
通过计算内部的subviews的宽高来自动调整contentSize。而在计算frame自动布局的年代,通过这只contentSize来设置滚动范围。-
在AutoLayout解决UIScrollview滚动问题的思路:
- 首先添加一个View,四周和scrollView一致
*设置view的edges与scrollView一致,然后设置view的宽度等于scrollView - 以后所有的控件都需要添加到View上面
- 首先添加一个View,四周和scrollView一致
代码实现
@interface ViewController ()
@property (nonatomic,strong) UIScrollView* scrollView;
@property (nonatomic,strong) UIView* containerView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.scrollView];
[self.scrollView addSubview:self.containerView];
[self layoutPageSubviews];
}
#pragma mark - 添加约束
- (void) layoutPageSubviews {
// 使用Masonry第三方框架
[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view);
}];
[self.containerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.scrollView);
make.width.equalTo(self.scrollView);
}];
#pragma mark - 懒加载
- (UIScrollView *)scrollView{
if (_scrollView==nil) {
_scrollView = [[UIScrollView alloc] init];
_scrollView.backgroundColor = [UIColor redColor];
_scrollView.showsVerticalScrollIndicator = YES;
_scrollView.showsHorizontalScrollIndicator = YES;
}
return _scrollView;
}
- (UIView *)containerView{
if (_containerView==nil) {
_containerView = [[UIView alloc] init];
_containerView.backgroundColor = [UIColor orangeColor];
}
return _containerView;
}