設(shè)置rootVC
在AppDelegate中
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 設(shè)置rootViewController
self.window = UIWindow.init()
let naviVC = UINavigationController.init(rootViewController: ViewController())
self.window?.rootViewController = naviVC
return true
}
init
如果通過xib或storyboard創(chuàng)建,會(huì)首先調(diào)用該方法
loadView
加載View,此時(shí)VC還未初始化,可以在這里替換默認(rèn)的View,若重寫邏輯,就不能調(diào)用[super loadView]。
viewDidLoad
在VC的生命周期中,只會(huì)被調(diào)用一次。此時(shí)view已經(jīng)初始化好,可以做一些頁面初始化任務(wù),由于此時(shí)view的bounds尚未確定,所以不適合寫frame類型的布局代碼,但是給視圖添加約束沒有影響。
重寫該方法來配置在xib或storyboard中沒有配置的東西。
當(dāng)VC當(dāng)視圖層從xib或storyboard中被加載到內(nèi)存中的時(shí)候,該方法也會(huì)被調(diào)用。
當(dāng)ViewDidLoad被調(diào)用的時(shí)候,IBQutlets已經(jīng)被連接,但是View還沒有被加載出來,所以可以在viewDidLoad中完成在IB中不能完成的view的自定義。
注意:當(dāng)viewController在navigation堆棧中,從此界面跳轉(zhuǎn)到其他界面,再返回過來,不會(huì)再走ViewDidLoad方法,所以不能把需要在VC準(zhǔn)備變?yōu)榛钴S狀態(tài)的時(shí)候做相應(yīng)更新的代碼放在這里。
viewWillAppear
VC的視圖將要出現(xiàn)時(shí)調(diào)用,可能會(huì)調(diào)用多次,適合做一些與視圖相關(guān)聯(lián)的任務(wù),適合做一些與視圖出現(xiàn)相關(guān)聯(lián)的任務(wù),例如改變狀態(tài)欄的方向、風(fēng)格。
viewWillLayoutSubviews
ViewController的view的子視圖即將布局,觸發(fā)條件是
- view 被添加到視圖層次中
- view 的 bounds 發(fā)生了改變 ,view將調(diào)整其子控件的位置。
- 調(diào)用了 - setNeedsLayout方法
- 調(diào)用了 - layoutIfNeeded方法
該方法默認(rèn)實(shí)現(xiàn)為空。調(diào)用時(shí),autolayout未起作用,在生命周期中可能會(huì)被多次調(diào)用。
viewDidLayoutSubviews
當(dāng) view 的子視圖已經(jīng)布局時(shí),此方法會(huì)被調(diào)用,觸發(fā)條件同上。
當(dāng)VC的子視圖的position和size被改變時(shí)被調(diào)用。
該方法默認(rèn)實(shí)現(xiàn)為空,此時(shí)AutoLayout已經(jīng)完成,在生命周期中可能會(huì)被多次調(diào)用。
在view 已經(jīng)被設(shè)計(jì)好了它的subviews并且還沒有被展示在屏幕上時(shí)候,可以調(diào)用此方法改變這個(gè)view。
關(guān)鍵點(diǎn)是改變bounds。任何依賴于bounds,并且需要去完成的操作都應(yīng)該放在viewDidLayoutSubviews中,而不是viewDidLoad或viewWillAppear中。
因?yàn)関iew的frame和bounds直到Auto Layout 已經(jīng)完成工作的時(shí)候才會(huì)被確定,所以在執(zhí)行完Auto Layout之后會(huì)調(diào)用此方法。
viewDidAppear
視圖從屏幕中出現(xiàn)后觸發(fā)。
viewWillDisappear
視圖即將從屏幕中消失時(shí)觸發(fā)。
viewDidDisappear
視圖從屏幕中消失后觸發(fā)。
多個(gè)ViewController跳轉(zhuǎn)
A push到 B
A loadView
A viewDidLoad
A viewWillAppear
A viewWillLayoutSubviews
A viewDidLayoutSubviews
A viewDidAppear
B loadView
B viewDidLoad
A viewWillDisappear
B viewWillAppear
B viewWillLayoutSubviews
B viewDidLayoutSubviews
A viewDidDisappear
B viewDidAppear
B pop到 A
B viewWillDisappear
A viewWillAppear
B viewDidDisappear
A viewDidAppear