UIScrollView采用SDAutoLayout自动计算contentSize卡顿解决方案

1、学系统UITableView处理增加包装器wrapperView

@property (nonatomic, strong) UIView *wrapperView;

2、所有需要添加到UIScrollView页面上,改为添加到wrapperView上

   //添加页面
    [self.view addSubview:self.scrollView];
    [self.scrollView addSubview:self.wrapperView];
    [self.wrapperView addSubview:view1];
    [self.wrapperView addSubview:view2];
    ...

   //布局
    self.scrollView.sd_layout.spaceToSuperView(UIEdgeInsetsZero);

    self.wrapperView.sd_layout
    .leftEqualToView(self.scrollView)
    .topEqualToView(self.scrollView)
    .rightEqualToView(self.scrollView);

     self.view1.sd_layout
    .leftSpaceToView(self.wrapperView, 16)
    .topSpaceToView(self.wrapperView, 8)
    .rightSpaceToView(self.wrapperView, 16)
    .height(50);

     self.view2.sd_layout
    .leftSpaceToView(self.wrapperView, 16)
    .topSpaceToView(self.view1, 8)
    .rightSpaceToView(self.wrapperView, 16)
    .height(50);

    [self.wrapperView setupAutoHeightWithBottomView:self.view2 bottomMargin:0];
    
    [self.scrollView setupAutoContentSizeWithBottomView:self.wrapperView bottomMargin:0];

3、滚动事件处理

#pragma mark - UIScrollViewDelegate

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    // 由于scrollview在滚动时会不断调用layoutSubvies方法,这就会不断触发自动布局计算,而很多时候这种计算是不必要的,所以可以通过控制“sd_closeAutoLayout”属性来设置要不要触发自动布局计算
    self.wrapperView.sd_closeAutoLayout = YES;
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    // 由于scrollview在滚动时会不断调用layoutSubvies方法,这就会不断触发自动布局计算,而很多时候这种计算是不必要的,所以可以通过控制“sd_closeAutoLayout”属性来设置要不要触发自动布局计算
    self.wrapperView.sd_closeAutoLayout = NO;
}

你可能感兴趣的:(UIScrollView采用SDAutoLayout自动计算contentSize卡顿解决方案)