在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);
}];
}