Xib隐藏控件以及frame(位置)改变

最近在学xib, 其中一些基本的已经掌握,但还不够熟练:如scrollview的xib约束;

xib创建控件需要用到约束(autolayout),autolayout进行了封装就是我们常见的masonry;

当你使用纯frame进行布局的时候,是确定一个控件的x,y,width,height; 那在使用xib的时候也是如此,不论你怎么进行约束,你确定的其实还是这些值,需要让xib知道控件的位置; 基于这个思想,再去进行约束的时候,思路会清晰很多.

之前遇到一个需求: 需要根据不同情况隐藏和显示一个控件,在改变的同时,会导致其它控件的改变;用纯frame计算需要计算这些控件的frame; 用xib则需要改变其constraint;

如上图:我想隐藏农行优惠这一行的文字,"还需支付"需要往上移动; 如果用frame计算,计算量不算大,只是比较繁琐; 如果用xib,则只需这样:


    if (change) {

        _abcTitleLab.hidden = YES;

        _abcTitleHeight.constant = 0;

        

        _abcPriceLab.hidden = YES;

        _accPriceHeight.constant = 0;

    }else{

        _abcTitleLab.hidden = NO;

        _abcTitleHeight.constant = 20;

        

        _abcPriceLab.hidden = NO;

        _accPriceHeight.constant = 20;

    }

我这边一行显示 用了两个label,所以需要对四个控件进行操作;

效果是这样的:


在这个过程中,我隐藏了控件, 但它只是隐藏了,本身的高度还是有的,所以需要改变控件高度的约束; 

由于下一个控件的约束是与此控件相关联的,间距为0;

当控件高度约束改为0,下个控件的top约束与此控件的约束仍为0;

所以控件会自动上移;



不用计算frame,只需要改变其中的一个约束,剩余的自动完成; 

减少了计算量和代码量;




写的可能有点混乱. xib还在学习中,以后也会更新xib的学习知识; 

记录防止遗忘;







猜你喜欢

转载自blog.csdn.net/xfy6238/article/details/77093698
今日推荐