在IOS開發(fā)過程中苞也,會經(jīng)常使用自動布局和代碼共同實現(xiàn)功能展示。自動布局會根據(jù)IOS設(shè)備類型粘秆,屏幕大小進行控件尺寸的動態(tài)調(diào)整來完成應(yīng)用的屏幕適配如迟,那么如何在代碼中獲取當前控件具體尺寸呢?
應(yīng)用場景:比如我們的應(yīng)用要求根據(jù)不同的業(yè)務(wù)場景翻擒,動態(tài)調(diào)整界面展示的內(nèi)容氓涣,導致在不同條件下需要在同一個UIView中加入不同類型的子View牛哺。那么如何保證子View可以根據(jù)父View尺寸來進行自動調(diào)整呢陋气?自然需要知道當前父View的尺寸,子View可以根據(jù)尺寸類設(shè)計引润,那么如何獲取父View的尺寸呢巩趁?何時獲取尺寸才合適?
UIViewController生命周期:
(void)loadView
(void)viewDidLoad
(void)viewWillAppear
(void)viewWillLayoutSubviews
(void)viewDidLayoutSubviews
(void)viewDidAppear
(void)viewWillDisappear
(void)viewDidDisappear
其中l(wèi)oadView淳附、viewDidLoad议慰、viewWillAppear、viewDidAppear奴曙、viewWillDisappear别凹、viewDidDisappear,不需要在此敘述洽糟,他們的執(zhí)行順序和完成的內(nèi)容可以參考UIViewController生命周期的各類文章炉菲,在此主要討論的是其中另外兩個常常被忽視的方法:viewWillLayoutSubviews、viewDidLayoutSubviews坤溃。
在介紹這兩個方法之前拍霜,需要了解的是UIView中的layoutSubViews方法,這個方法是在UIView發(fā)生變化時(包括子view發(fā)生變化薪介,自身尺寸調(diào)整等)祠饺,重新調(diào)整子View的方法。對的汁政,就是這個方法道偷,這個方法會適應(yīng)UIView的調(diào)整缀旁,我們可以在需要的時候?qū)ζ鋬?nèi)部的子View進行尺寸屬性等的修改來滿足新場景的需求。
同理试疙,在UIViewController中诵棵,viewWillLayoutSubviews和viewDidLayoutSubviews是加載控制器子View時相關(guān)兩個方法,類似viewWillAppear和viewDidAppear祝旷,viewWillLayoutSubviews是在加載子View之此前調(diào)用履澳,viewDidLayoutSubviews是加載子View完畢后調(diào)用。也就是說怀跛,當控制器執(zhí)行到viewDidLayoutSubviews時距贷,所有的內(nèi)部控件都已經(jīng)加載完畢,意味著尺寸大小已經(jīng)確定吻谋,此時的尺寸就是未來在屏幕中加載出來的View的尺寸忠蝗,這就是我們想要的。
所以漓拾,在IOS開發(fā)中我們應(yīng)該注意以下幾個幾點:1阁最、不要把所有的初始化操作都安排在viewDidLoad中,應(yīng)該根據(jù)具體的要求選擇合適的加載時機骇两;2速种、為布局做準備的操作可以在viewWillLayoutSubviews之前做,如決定子view的加載類型可以在viewDidLoad中進行判斷低千,而在總體布局基礎(chǔ)上上進行調(diào)整時需要在viewDidLayoutSubviews中操作(自動布局)配阵;3、不要在viewDidLoad等方法中進行耗時操作示血,會影影響界面的加載效率棋傍;