使在 Xcode 11 中创建的项目向后兼容



我用Xcode 11创建了一个新项目。我习惯于以编程方式创建UIWindow的根视图控制器,我第一次注意到这个新的 SceneDelegate 文件。经过一些研究,我找到了一篇描述如何使用这个新的UISceneAPI创建根视图控制器的文章,它似乎可以正常工作。但是,我找不到对较低iOS版本执行相同操作的方法,因为AppDelegate类现在不再具有window属性。所以我的问题是如何以编程方式为其他 iOS 版本创建根视图控制器?

如果有人遇到同样的事情,这是代码。

iOS 13 工作流程

代码取自本文。

在场景委托文件中:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
guard let windowScene = (scene as? UIWindowScene) else { return }
self.window = UIWindow(frame: windowScene.coordinateSpace.bounds)
self.window?.windowScene = windowScene
let controller = UIViewController()
let navigationController = UINavigationController(rootViewController: controller)
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
}


iOS 12 及更低版本

在您的应用程序委托文件中:

var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if #available(iOS 13.0, *) { return true }
self.window = UIWindow(frame: UIScreen.main.bounds)
let controller = UIViewController()
let navigationController = UINavigationController(rootViewController: controller)
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
return true
}                         


UIWindow保存在变量中以使其显示非常重要。

相关内容

  • 没有找到相关文章

最新更新