【发布时间】:2019-11-25 09:18:18
【问题描述】:
我正在升级我的应用程序以使用 iOS 13 中定义的新 UIScene 模式,但是该应用程序的一个关键部分已停止工作。
我一直在使用UIWindow 覆盖屏幕上的当前内容并向用户呈现新信息,但在我正在使用的当前测试版(iOS + XCode beta 3)中,窗口会出现,但随后会立即消失.
这是我使用的代码,现在不起作用:
let window = UIWindow(frame: UIScreen.main.bounds)
let viewController = UIViewController()
viewController.view.backgroundColor = .clear
window.rootViewController = viewController
window.windowLevel = UIWindow.Level.statusBar + 1
window.makeKeyAndVisible()
viewController.present(self, animated: true, completion: nil)
我尝试了很多东西,包括使用WindowScenes 来展示新的UIWindow,但找不到任何实际的文档或示例。
我的一个尝试(没有奏效 - 窗口出现并立即消失的相同行为)
let windowScene = UIApplication.shared.connectedScenes.first
if let windowScene = windowScene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
let viewController = UIViewController()
viewController.view.backgroundColor = .clear
window.rootViewController = viewController
window.windowLevel = UIWindow.Level.statusBar + 1
window.makeKeyAndVisible()
viewController.present(self, animated: true, completion: nil)
}
在 iOS 13 测试版中是否有人能够做到这一点?
谢谢
编辑
从提出这个问题到发布 iOS 13 的最终版本已经过去了一段时间。下面有很多答案,但几乎所有答案都包含一件事 - 添加对 UIWindow 的强/强引用。您可能需要包含一些与新场景相关的代码,但请先尝试添加强引用。
【问题讨论】:
-
您需要保留对窗口对象的引用
-
@LeoDabus 我想在当前窗口上显示一个新窗口吗?我将在哪里使用对我的窗口对象的引用?顶部代码块在 13 beta 之前完美运行
-
将窗口声明移出闭包
-
尝试
var window: UIWindow?if let windowScene = windowScene as? UIWindowScene {window = .init(windowScene: windowScene)然后使用可选链接window?.whatever -
@LeoDabus 啊我明白了。我试过了,但没有用。
Window和windowScene都是已成功引用的实际对象,问题不在于找不到这些对象,我只是得到与顶部代码块和底部代码块相同的行为。谢谢
标签: ios swift uiwindow ios13 uiscenedelegate