Xcode 11.5 IOS 13.5 在 Scenedelegate 中设置视图控制器后黑屏

Xcode 11.5 IOS 13.5 Dark screen after setting view controller in Scenedelgate

新手提醒:我正在做 Swift 11.6 和 IOS 13.6。我是 Swift 的初学者,我正在尝试检查我的用户之前是否登录过。为此,我使用了用户默认值,它似乎工作正常。问题是当我在 Scenedelgate 中初始化我的视图控制器时,它似乎无法正常工作 - 我只看到黑屏。

另一个注意事项是我的主屏幕上有一个侧面菜单,所以我尝试初始化 UINavigationController,然后初始化其中的 HomeViewController

这是我的场景委托代码:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

var window: UIWindow?
var storyboard: UIStoryboard?
var view: UIView?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

         guard let _ = (scene as? UIWindowScene) else {return}
    let def = UserDefaults.standard
               let is_authenticated = def.bool(forKey: "is_authenticated") // return false if not found or stored value

               if is_authenticated {
                   // user logged in
                self.view?.window?.rootViewController = UINavigationController(rootViewController: HomeViewController())
                self.view?.window?.makeKeyAndVisible()
                   }
}

编辑 1: 这是我的用户默认函数的样子:

 func saveLoggedState() {

    let def = UserDefaults.standard
    def.set(true, forKey: "is_authenticated") // save true flag to UserDefaults
    def.synchronize()

}

编辑 2: Here's how my simulator looks

编辑 3: Here's how my view controller looks

编辑 4: 所以这就是问题所在。我决定尝试以编程方式将主视图控制器设置为白色,这显然有效。因此 what/s 让我感到困惑的是,我看不到我放入 HomeViewController 或 SideMenuNavigationController 中的任何内容。我放了一个按钮和一个标签,但它们没有显示。

感谢您提供的任何建议。我是一个完全的新手,所以我真的不知道我在做什么。任何帮助表示赞赏。

谢谢!

尝试像这样添加 windowScene 并正确呈现根控制器:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

     guard let windowScene = (scene as? UIWindowScene) else {return}

     let def = UserDefaults.standard
     let is_authenticated = def.bool(forKey: "is_authenticated") // return false if not found or stored value

      if is_authenticated {
      // user logged in
      window = UIWindow(windowScene: windowScene)
      window?.makeKeyAndVisible()
      let controller = UINavigationController(rootViewController: HomeViewController())
      window?.rootViewController = controller
    }
 }

如果您的用户默认设置正确,HomeViewController() 会向您显示...

这一行是错误的:

self.view?.window?.rootViewController = UINavigationController(rootViewController: HomeViewController())

问题尤其在于您代码中的这个短语:

HomeViewController()

这将创建一个新的空白 HomeViewController,而不是您在故事板中设计的实例。要获取该实例,请告诉故事板为您实例化它。