iOS:应用程序启动后,UIApplication.sharedApplication.keyWindow.rootVi



我从我的viewWillAppear调用了一些代码,这些代码依赖于根视图控制器的 traitCollection 是否有效。令我惊讶的是,即使在调用 viewWillSeem 时,UIApplication.sharedApplication.keyWindow.rootViewController仍然是零,在它被设置并调用makeKeyWindow很久之后。 为什么会这样?到底是怎么回事?似乎一些合理的假设已经不再正确。

启示是,在分配窗口并调用 viewWillAppear 之后,不仅 keyWindow 被弃用,而且实际上不起作用并返回 nil。

因此,请更改为以下内容:

UIViewController *vc = UIApplication.sharedApplication.windows.firstObject.rootViewController;

我假设您没有在didFinishLaunchingWithOptions方法上分配window属性

如果应用委托分配中没有窗口属性,则会保留该属性

你有没有写过类似的代码?

self.window = UIWindow(frame: UIScreen.main.bounds)
let mainVC = UIViewController()
self.window?.rootViewController = mainVC
self.window?.makeKeyAndVisible()

顺便说一下,keyWindow属性现已弃用

试试这个:

UIApplication.shared.windows.first({ $0.isKeyWindow })

相关内容

最新更新