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

Ios 使在Xcode 11中创建的项目向后兼容,ios,swift,xcode11,Ios,Swift,Xcode11,我使用Xcode 11创建了一个新项目。我习惯于以编程方式创建我的UIWindow的根视图控制器,我第一次注意到这个新的SceneDelegate文件。经过一些研究,我发现了一篇文章,描述了如何使用这个新的UISceneAPI创建根视图控制器,它似乎工作正常。然而,我找不到一种方法来为较低的iOS版本做同样的事情,因为AppDelegate类现在不再有窗口属性。因此,我的问题是,如何以编程方式为其他iOS版本创建根视图控制器?如果有人面临同样的问题,下面是代码 iOS 13工作流程 代码取自文章

我使用Xcode 11创建了一个新项目。我习惯于以编程方式创建我的
UIWindow
的根视图控制器,我第一次注意到这个新的SceneDelegate文件。经过一些研究,我发现了一篇文章,描述了如何使用这个新的
UIScene
API创建根视图控制器,它似乎工作正常。然而,我找不到一种方法来为较低的iOS版本做同样的事情,因为AppDelegate类现在不再有
窗口
属性。因此,我的问题是,如何以编程方式为其他iOS版本创建根视图控制器?

如果有人面临同样的问题,下面是代码

iOS 13工作流程 代码取自文章

在SceneDelegate文件中:

func场景(场景:UIScene,willConnectTo会话:UISceneSession,选项connectionOptions:UIScene.connectionOptions){
//使用此方法可以选择性地配置UIWindow`window`并将其附加到提供的UIWindowScene`scene`。
//如果使用情节提要,“窗口”属性将自动初始化并附加到场景。
//此委托并不意味着连接的场景或会话是新的(请参见'application:ConfigurationForConnectionSceneSession'。
guard let windowScene=(场景为?UIWindowScene)else{return}
self.window=UIWindow(框架:windowScene.coordinateSpace.bounds)
self.window?.windowScene=windowScene
let controller=UIViewController()
让navigationController=UINavigationController(rootViewController:controller)
self.window?.rootViewController=navigationController
self.window?.makeKeyAndVisible()
}

iOS 12及以下版本 在AppDelegate文件中:

var窗口:UIWindow?
func应用程序(application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplication.launchOptions键:任意]?)->Bool{
如果#可用(iOS 13.0,*){返回真值}
self.window=UIWindow(框架:UIScreen.main.bounds)
let controller=UIViewController()
让navigationController=UINavigationController(rootViewController:controller)
self.window?.rootViewController=navigationController
self.window?.makeKeyAndVisible()
返回真值
}                         


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

UIScene
仅适用于iOS13+,因此,如果您想支持较旧的操作系统,您需要手动添加
ui窗口
代码。有关更新的单视图应用程序模板,请参阅,该模板可创建支持iOS 12和iOS 13的基于代码或情节提要的应用程序项目。它支持Swift和Objective-C。这个答案只是一个开始。这是不完整的<将在iOS 12和iOS 13下调用code>didFinishLaunchingWithOptions。但您不想在iOS 13下创建窗口或根视图控制器。有关正确的设置,请参阅。