iOS 13:Swift - “以编程方式设置应用程序根视图控制器”不起作用

swiftIOS

1个回答

写回答

本高高

2025-07-10 02:47

+ 关注

IOS
IOS

文章是一项复杂而有趣的技术。人工智能技术的快速发展使得我们能够自动生成符合语法和语义规则的文章。本文将探讨一个与IOS开发相关的问题:在IOS 13中,以编程方式设置应用程序的根视图控制器似乎无效。我们将通过使用Swift编程语言来解决这个问题,并提供一些案例代码来帮助读者理解这个问题。

IOS开发中,根视图控制器是应用程序中最重要的部分之一。它负责管理应用程序的整体结构,并负责在应用程序启动时显示的第一个界面。通常情况下,开发者可以通过Storyboard或代码的方式来设置根视图控制器。然而,在IOS 13中,一些开发者发现以编程方式设置根视图控制器的方法似乎无效。

问题描述

IOS 13中,开发者通常会使用SceneDelegate来设置根视图控制器。然而,一些开发者在使用以下代码时遇到了问题:

Swift

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

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

let window = UIWindow(windowScene: windowScene)

let rootVC = ViewController()

window.rootViewController = rootVC

window.makeKeyAndVisible()

}

在这个例子中,我们创建了一个新的UIWindow对象,并将其根视图控制器设置为ViewController。然而,当应用程序启动时,根视图控制器并没有显示出来。

解决方案

IOS 13中,引入了新的场景生命周期来管理应用程序。因此,我们需要在SceneDelegate中进行一些额外的设置来确保根视图控制器正确显示。

首先,我们需要在Info.plist文件中添加一个新的键值对,以告诉应用程序使用SceneDelegate来管理场景生命周期。在Info.plist文件中,添加以下键值对:

<key>UIApplicationSceneManifest</key>

<dict>

<key>UIApplicationSupportsMultipleScenes</key>

<false/>

<key>UISceneConfigurations</key>

<dict>

<key>UIWindowSceneSessionRoleApplication</key>

<array>

<dict>

<key>UISceneDelegateClassName</key>

<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>

<key>UISceneStoryboardFile</key>

<string>MAIn</string>

</dict>

</array>

</dict>

</dict>

在这个例子中,我们将UISceneDelegateClassName设置为SceneDelegate,并将UISceneStoryboardFile设置为MAIn,这是我们的主Storyboard文件名。

接下来,我们需要在SceneDelegate中实现scene(_:willConnectTo:options:)方法。在这个方法中,我们将创建一个新的UIWindow对象,并设置根视图控制器。

Swift

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

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

let window = UIWindow(windowScene: windowScene)

let storyboard = UIStoryboard(name: "MAIn", bundle: nil)

let rootVC = storyboard.instantiateInitialViewController()

window.rootViewController = rootVC

window.makeKeyAndVisible()

self.window = window

}

在这个例子中,我们使用UIStoryboard来获取我们的主Storyboard,并使用instantiateInitialViewController()方法来获取根视图控制器。然后,我们将根视图控制器设置为UIWindow的根视图控制器,并将其显示出来。

通过这些改变,我们应该能够成功地以编程方式设置应用程序的根视图控制器,并在IOS 13中正确显示。

在本文中,我们探讨了在IOS 13中以编程方式设置应用程序的根视图控制器似乎不起作用的问题。我们通过添加一些额外的设置来解决了这个问题,并提供了案例代码来帮助读者理解。通过这些改变,我们能够成功地在IOS 13中以编程方式设置应用程序的根视图控制器,并正确地显示出来。

希望本文对那些在IOS开发中遇到相似问题的开发者有所帮助。如果您有任何疑问或建议,请随时在评论中提出。感谢阅读!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号