要了解autolayout 首先要知道程序視圖啟動(dòng)順序:
-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; NSLog(@"1");}-(void)updateViewConstraints{ [super updateViewConstraints]; NSLog(@"2");}-(void)viewDidLayoutSubviews{ //調(diào)用不止一次 跟子視圖的數(shù)量有關(guān) [super viewDidLayoutSubviews]; NSLog(@"3");}-(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; NSLog(@"4");}updateViewConstraints方法中進(jìn)行視圖上布局計(jì)算,得出各個(gè)控件的frame.但是此時(shí)并沒(méi)有將這些frame賦值給各個(gè)控件。在viewDidLayoutSubviews方法中,各個(gè)控件的frame賦值已經(jīng)完成,但是并不是在這個(gè)方法中賦值的。
如果我們要代碼添加控件和約束,別忘了先去除控件的autoresizing ,否則會(huì)報(bào)出警告,因?yàn)槎邥?huì)存在約束沖突。translatesAutoresizingMaskIntoConstraints=NO 代碼添加控件還應(yīng)注意,控件的創(chuàng)建和添加應(yīng)在updateViewConstraints 方法之前。否則 每次添加控件都會(huì)觸發(fā)updateViewConstraints方法,導(dǎo)致界面會(huì)抖動(dòng),以及出現(xiàn)不期望的結(jié)果。當(dāng)我們使用自動(dòng)布局時(shí)還應(yīng)注意,控件分為兩種,一種是固定寬高的,另一種是不固定的依靠自身內(nèi)容決定寬高的。比如 開(kāi)關(guān)控件就是個(gè)固定大小的,它的大小就是那么大,不會(huì)改變。對(duì)于這種控件,我們只需要設(shè)定它的左邊和上邊的位置就可以了,設(shè)置好之后,這個(gè)控件還可以作為其他控件的約束參照。但是比如label 這樣根據(jù)內(nèi)容決定寬高的控件,雖然在有內(nèi)容時(shí)候,它也可以只設(shè)置左邊和上邊的距離,但是它不能作為其他控件的參照了,除非鎖定了它的寬高。比如 我們?cè)O(shè)定label ,距離左邊父控件 20 ,距離上邊父控件20.那么假如我們有另一個(gè)控件(假定為button)我們不可以設(shè)定button 距離左邊這個(gè)label 20。<span style="font-family: Arial, Helvetica, sans-serif;">自動(dòng)布局中大多數(shù)控件都是好設(shè)定的,但是比較難搞的時(shí)scrollview 。因?yàn)樗强孔陨韮?nèi)容的大小來(lái)決定它的大小的。比如,我們?cè)O(shè)定了scrollview 距離左上下右的距離都是20 ,那么它會(huì)提示警告。解決的辦法之一就是在scrollView內(nèi)部再添加一個(gè)容器view,將這個(gè)view設(shè)定為與scrollview 完全貼近。然后將這個(gè)view的大小改為我們所需要的contentView的大小。最后再這個(gè)view中添加控件即可實(shí)現(xiàn)滾動(dòng)。</span>
總體來(lái)說(shuō)自動(dòng)布局很好地解決了屏幕適配 ,尤其是橫豎屏切換的問(wèn)題。大大簡(jiǎn)化了我們的計(jì)算代碼,但是我們又有多少應(yīng)用是同時(shí)支持橫豎屏的呢?而且自動(dòng)布局使我們界面的動(dòng)畫(huà)及控件的動(dòng)態(tài)創(chuàng)建都收到了極大的影響,盡管這些影響都能解決,但是還是不如計(jì)算frame方便。而且自動(dòng)布局盡管引入了vfl 語(yǔ)言簡(jiǎn)化代碼,但是約束設(shè)置錯(cuò)誤的話(huà)真的是很難查,如果我們需要使用動(dòng)畫(huà)的話(huà),需要將約束設(shè)置為屬性。設(shè)置成屬性的話(huà),不如計(jì)算frame方便。如果你數(shù)學(xué)不是很差的話(huà),建議你還是使用計(jì)算frame 來(lái)布局吧</span>
|
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注