最近在学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的学习知识;
记录防止遗忘;