1. 程式人生 > >Xib隱藏控制元件以及frame(位置)改變

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的學習知識; 

記錄防止遺忘;