代码之家  ›  专栏  ›  技术社区  ›  TheoK

在启动期间,当UIViewController被设置为UIWindow的根目录时,将出现ViewWill,并且不会调用更高版本的生命周期事件

  •  2
  • TheoK  · 技术社区  · 7 年前

    我有下面一段代码在我的 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?.rootViewController = UIViewController()
    

    window?.rootViewController = mainViewController
    

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

    然而,似乎要么是我遗漏了什么,要么是存在某种生命周期问题。

    是否有人面临同样的问题并找到了根本原因?

    1 回复  |  直到 7 年前
        1
  •  5
  •   Shubham    7 年前

    设置窗口的根视图控制器后,尝试使窗口键在末尾可见。

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