当UIScrollView遇上AutoLayout

  • 当UIScrollView碰上AutoLayout的时候,经常出现一个令人尴尬的问题,就是我们的UIScrollview不能滚动了,今天我们就主要解决这个问题。

  • UIScrollView是AutoLayout中一个特殊的View。在AutoLayout中,UIScrollview
    通过计算内部的subviews的宽高来自动调整contentSize。而在计算frame自动布局的年代,通过这只contentSize来设置滚动范围。

  • 在AutoLayout解决UIScrollview滚动问题的思路:

    • 首先添加一个View,四周和scrollView一致
      *设置view的edges与scrollView一致,然后设置view的宽度等于scrollView
    • 以后所有的控件都需要添加到View上面
  • 代码实现

@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;
}

你可能感兴趣的:(当UIScrollView遇上AutoLayout)