控制器
控制器生命周期簡介:
- init-初始化程序
- loadView-從nib載入視圖
- viewDidLoad-加載視圖
- viewWillAppear-即將出現(xiàn)
- viewWillLayoutSubviews-即將加載子視圖
- viewDidLayoutSubviews-已經(jīng)加載子視圖
- viewDidApper-已經(jīng)出現(xiàn)
- viewWillDisappear-即將消失
- viewDidDisappear-已經(jīng)消失
- viewWillUnload-即將釋放
- viewDidUnload-已經(jīng)釋放
布局
我們能看到手機上的視圖都是UIView還有它的子UIView随橘,當(dāng)然不能雜亂無章的顯示掌唾。要進行布局钮莲,父UIView需要布局饺鹃、排列這些子UIView。UIView提供了layoutSubviews
方法來處理条霜。
一般情況視圖方法layoutSubviews
調(diào)用順序為:
viewDidLayoutSubviews (控制器)
layoutSubviews
drawRect:
viewDidApper (控制器)
需要注意的是layoutSubviews
方法由系統(tǒng)來調(diào)用催什,不能程序員來手動調(diào)用≡姿可以用以下兩個手動方法調(diào)用:
setNeedsLayout
方法進行標記蒲凶,在UI下個刷屏循環(huán)中系統(tǒng)會調(diào)用layoutSubviews。layoutIfNeeded
直接請求系統(tǒng)調(diào)用layoutSubviews拆内。
layoutSubviews
的自動被調(diào)用的時機:
addSubview
會觸發(fā)layoutSubviews
旋圆,比如viewA add viewB,第一次添加A和B的layoutSubviews都會被調(diào)用麸恍,而第二次(viewA已經(jīng)有了viewB)只調(diào)用viewB的- view的Frame變化
- 滾動UIScrollView會觸發(fā)
layoutSubviews
- 旋轉(zhuǎn)Screen會觸發(fā)父UIView上的
layoutSubviews
- 改變transform屬性時灵巧,當(dāng)然frame也會變
- 處于key window的UIView才會調(diào)用(程序同一時間只有一個window為keyWindow,可以簡單理解為顯示在最前面的window為keywindow)
另:關(guān)于 sizeToFit
需要注意如下:
- sizeToFit會自動調(diào)用sizeThatFits方法。
- sizeToFit不應(yīng)該在子類中被重寫,應(yīng)該重寫sizeThatFits传惠。
- sizeThatFits傳入的參數(shù)是receiver當(dāng)前的size聂宾,返回一個適合的size截汪。
- sizeToFit可以被手動直接調(diào)用。
- sizeToFit和sizeThatFits方法都沒有遞歸,對subviews也不負責(zé),只負責(zé)自己麦到。