我已经使用Xcode 11,Beta 5为iOS 13手动设置了根视图控制器。在部署信息中删除了对main的引用,包括在info.plist中删除了对main的引用,而我从未发现自己必须在iOS 13之前做。窗口在SceneDelegate中完成,嵌套在willConnectTo函数中。通常,如果我错过了某个步骤,该应用程序将崩溃。现在,我得到了一个空白的黑屏,而不是看到我的视图控制器设置为红色背景。所有这些功能都可以在Beta 5之前使用。
执行了擦除模拟器上的所有内容和设置的操作。清除了构建文件夹,并已在物理设备上运行了该应用程序。也已使用另一台Xcode 11 beta 5的计算机。所有结果均显示在相同的黑屏上。我想念什么?
这是我在willConnectTo函数中嵌套的SceneDelegate文件中的根视图控制器的手动设置:
let viewCon = ViewController() window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = viewCon window?.makeKeyAndVisible()
为了确保在以编程方式完成所有操作后都能在iOS 13中看到根视图控制器,您必须执行以下操作:
在场景委托中,必须创建窗口实例和根视图控制器:
class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let winScene = (scene as? UIWindowScene) else { return } // Create the root view controller as needed let vc = ViewController() let nc = UINavigationController(rootViewController: vc) // Create the window. Be sure to use this initializer and not the frame one. let win = UIWindow(windowScene: winScene) win.rootViewController = nc win.makeKeyAndVisible() window = win } }
您的Info.plist必须具有“应用程序场景清单”条目。它下面应是“启用多个Windows”条目。根据您的应用设置为是或否。(可选)您还应该具有“场景配置”条目。
当您在目标的“常规”选项卡上选中“支持多个窗口”设置时,所有这些条目均由Xcode添加。这将默认将“启用多个窗口”(Enable Multiple Windows)条目设置为“是”(YES),因此,如果您需要场景但不需要多个窗口,则可以将其更改为“否”。