我正在升级我的应用程序,以使用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 beta 中已经成功实现过这个了吗?
谢谢
编辑
问这个问题和最终版本的 iOS 13 发布之间已经过去了一段时间。下面有很多答案,但几乎所有答案都包括一个要点 - 向 UIWindow 添加强引用(strong/stronger reference)。你可能需要包括一些关于新场景(Scenes)的代码,但先尝试添加强引用。
var window: UIWindow?
,如果可以将windowScene
转换为UIWindowScene
类型,则执行以下操作:window = .init(windowScene: windowScene)
然后使用可选链式调用window?.whatever
。 - Leo DabusWindow
和windowScene
都是已经成功引用的实际对象,问题不在于找不到这些对象,而是我得到了与顶部代码块相同的行为。谢谢。 - mHopkins