在启动期间将UIViewController设置为UIWindow的根目录时,不会调用viewWillAppear和更高版本的生命周期事件

时间:2019-01-08 13:48:12

标签: ios swift

我的application(_:didFinishLaunchingWithOptions:)方法中有以下代码

self.window = self.window ?? UIWindow()
self.window?.makeKeyAndVisible()
let mainViewController = HomeViewController.instantiate() //here I just call the viewController through storyboard, set some properties and return its instance
window?.rootViewController = mainViewController

我检查过,将viewController添加到window时调用的唯一生命周期事件是:

viewDidLoad
viewWillLayoutSubviews
viewDidLayoutSubviews

此后的任何内容都不会被调用(仅当它最初添加到window中之后才发生,然后才按照预期方式调用事件)。还没有设置“安全布局指南”(我相信其他视图属性也是如此)。为了绕过此问题,我执行以下操作:

window?.rootViewController = UIViewController()

然后

window?.rootViewController = mainViewController

这似乎以某种方式迫使窗口在第二次设置其根视图控制器时正常工作。

但是似乎我缺少某些东西,或者存在某种生命周期问题。

有人遇到相同的问题并找到了根本原因吗?

1 个答案:

答案 0 :(得分:5)

设置窗口的根视图控制器后,尝试在最后显示窗口键和“可见”。

self.window = self.window ?? UIWindow()
let mainViewController = HomeViewController.instantiate()
window?.rootViewController = mainViewController
self.window?.makeKeyAndVisible()