我用Xcode 11创建了一个新项目。我习惯于以编程方式创建UIWindow
的根视图控制器,我第一次注意到这个新的 SceneDelegate 文件。经过一些研究,我找到了一篇描述如何使用这个新的UIScene
API创建根视图控制器的文章,它似乎可以正常工作。但是,我找不到对较低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
保存在变量中以使其显示非常重要。