Masonry流水線布局

在UI開發(fā)過程中,經(jīng)常出現(xiàn)view顯示與隱藏的邏輯,也就是說當(dāng)上面的view隱藏時,需要下面的view頂上來,如:

正常情況 2隱藏 2,4隱藏
view1 view1 view1
view2 view3 view3
view3 view4 view5
view4 view5
view5

我們在用Masonry布局的時候,實(shí)現(xiàn)上面的需求,同時需要view自適應(yīng)高度,往往需要根據(jù)data屬性設(shè)置view的高度或者隱藏,導(dǎo)致里面判斷極其繁瑣,現(xiàn)在突然想到一個牛逼閃閃的點(diǎn)子,特意記錄一下:(如果你有更好的方式,留言,但是不要嘲笑??)

1:初始化view:這里面把所有的view都初始化,管他后面會不會有用
2:獲取數(shù)據(jù)后刷新view:這里設(shè)置對應(yīng)view的hidden屬性,不過不顯示就設(shè)置為NO
3:layoutSubviews中布局:
3-1: 定義一個零時的view = nil
3-2: 判斷view1是否要顯示,如果顯示,對view 布局,同時將view = view1
3-3: 如果不顯示,就用2方法判斷view2 依此類推 ,同時view2的top布局相對于view的底部
3-4:在最后一個view布局的時候不要添加對底部了依賴
3-5:最后添加零時view地底部相對于底部的依賴即可

-(instancetype)initWithFrame:(CGRect)frame{
    if (self == [super initWithFrame:frame]) {
        [self confitUI];
    }
    return self;
}

-(void)confitUI{
    self.view1 = [UIView new];
    [self addSubview:_view1];

    self.view2 = [UIView new];
    [self addSubview:_view1];

    self.view3 = [UIView new];
    [self addSubview:_view1];

    self.view4 = [UIView new];
    [self addSubview:_view1];

    self.view5 = [UIView new];
    [self addSubview:_view1];
}
-(void)reload:(TestData*)data{
      if(data.one){
            view1.hidden = YES;
      }
      if(data.tow){
           view2.hidden = YES;
      }
      if(data.thir){
           view3.hidden = YES;
      }
      if(data.foun){
            view4.hidden = YES;
      }
  if(data.five){
            view5.hidden = YES;
      }
}

-(void)layoutSubviews{
    [super layoutSubviews];
    UIView *temView = nil;
    if(! _view1.hidden){
       [_view1 mas_makeConstraints:^(MASConstraintMaker *make) {
          if(temView){
              make.top.mas_equalTo(temView.mas_bottom);
          }else{
            make.top.mas_equalTo(self);
          }
          make.left.mas_equalTo(self);
          make.width.mas_equalTo(300);
      }];
     temView = view1;
    }

    if(! _view2.hidden){
       [_view1 mas_makeConstraints:^(MASConstraintMaker *make) {
          if(temView){
              make.top.mas_equalTo(temView.mas_bottom);
          }else{
            make.top.mas_equalTo(self);
          }
          make.left.mas_equalTo(self);
          make.width.mas_equalTo(300);
      }];
      temView = view2;
    }

    if(! _view3.hidden){
       [_view3 mas_makeConstraints:^(MASConstraintMaker *make) {
          if(temView){
              make.top.mas_equalTo(temView.mas_bottom);
          }else{
            make.top.mas_equalTo(self);
          }
          make.left.mas_equalTo(self);
          make.width.mas_equalTo(300);
        }];
    temView = view3;
    }
...
    [temview mas_updateConstraints:^(MASConstraintMaker *make) {
        make.bottom.mas_equalTo(self.contView).mas_offset(-Panding_DEF);
    }];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容