Masonryを使用してscrollViewにコンストレイントを設定する

3121 ワード

次の3つのコントロールが必要です.
@property (nonatomic, weak) UIScrollView *scrollView;
@property (nonatomic, weak) UIImageView *image_View;
@property (nonatomic, weak) UIView *containerView;

怠惰なロードまたはその他の方法で3つのコントロールを作成します.
  • まずscrollViewを作成し、コントローラviewに追加します.
  • containerViewを作成してscrollViewに追加します.scrollViewのコンテナビューとして、scrollViewのスクロール範囲をコンストレイントで設定するための
  • です.
  • 追加するレイヤー(例えばimage_View)をcontainerViewに追加し、ビューの高さや幅が画面より大きい場合は
  • をスクロールできます.
    3つのサブコントロールを作成
    - (UIView *)containerView {
        if (_containerView == nil) {
        UIView *containerView = [UIView new];
        [self.scrollView addSubview:containerView];
        _containerView = containerView;
        }
      return _containerView;
    }
    
    - (UIScrollView *)scrollView {
        if (_scrollView == nil) {
        
        UIScrollView *scrollView = [UIScrollView new];
        [self.contentView addSubview:scrollView];
        _scrollView = scrollView;
      }
      return _scrollView;
    }
    
    - (UIImageView *)image_View {
        if (_image_View == nil) {
        UIImageView *imageView = [UIImageView new];
        [self.containerView addSubview:imageView];
        _image_View = imageView;
        }
      return _image_View;
    }
    

    3つのサブコントロールにコンストレイントを設定する
    //   scrollView   
    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.mas_equalTo(self.view);
     }];
        
    //   scrollView        
    [self.containerView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.mas_equalTo(self.scrollView);
            make.width.mas_equalTo(self.scrollView);     
    }];
    
    // 1.           
    UIImage *image = [[SDWebImageManager sharedManager].imageCache imageFromDiskCacheForKey:picURL.absoluteString];
    
    // 2.         ,       
    CGFloat width = kScreenW;
    CGFloat height = width / image.size.width * image.size.height;
    //              imageView   
    [self.image_View mas_remakeConstraints:^(MASConstraintMaker *make) {
        if (height > kScreenH) { //   ,       
            make.top.mas_equalTo(self.containerView);
           
          } else { //   ,    
            make.top.mas_equalTo((kScreenH - height) * 0.5);
          }
          make.left.right.mas_equalTo(self.containerView);
          make.height.mas_equalTo(height);
    }];
    
    //            scrollView     ,         
    [self.containerView mas_makeConstraints:^(MASConstraintMaker *make) {
        //                       ,  scrollView    
        make.bottom.mas_equalTo(self.image_View);
    }];
    
    //     
    [self.image_View sd_setImageWithURL:[self getBigImageURL:picURL] placeholderImage:[UIImage imageNamed:@"avatar_default_big"]];
    

    XIBまたはstoryboardでscrollViewの制約を設定する
    scrollView水平スクロール制約1.コントローラにscrollViewコントロールを追加し、まずscrollViewの拘束を上下左右の間隔0,2に設定.サブコントロールをscrollViewに追加する前に、scrollViewのコンテナビューとしてUIViewを追加し、scrollViewのスクロール範囲を決定します.親コントロールscrollViewに対するコンテナビューの上下左右のコンストレイントの間隔を0に設定.水平スクロールが必要な場合は、コンテナビューの高さと幅の制約を設定します.高さはscrollViewの高さと同じで、幅はスクロールの範囲によって決まりますが、幅と高さは固定する必要があります.
    scrollView垂直スクロールコンストレイントは、まずコンテナビューを追加し、コンストレイントを設定する必要があります.垂直スクロールが必要な場合は、コンテナビューの高さと幅のコンストレイントを設定します.幅はscrollViewの幅と同じで、高さはスクロールの範囲によって決まります.ビューの高さが画面より大きい場合はスクロールできます.注:scrollViewに必要なコントロールをコンテナビューに追加すればよい