我正在升级我的应用程序,以使用iOS 13中定义的新UIScene模式,但应用程序的关键部分已停止工作.

以下是我使用的代码,但现在不起作用:

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)

我try 过很多东西,包括用WindowScenes来展示新的UIWindow,但找不到任何实际的文档或示例.

我的一次try (没有成功——窗口出现时的相同行为,并立即被解雇)

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测试版中有人能做到这一点吗?

谢谢

EDIT

从提出这个问题到发布iOS 13的最终版本已经过go 了一段时间.下面有很多答案,但几乎所有答案都包括一件事——Adding a strong/stronger reference to the UIWindow.您可能需要包含一些与新场景相关的代码,但请先try 添加强引用.

推荐答案

在升级iOS 13场景模式的代码时,我也遇到了同样的问题.通过你的第二个代码片段的部分内容,我成功地修复了所有问题,使我的windows再次出现.除了最后一行,我和你一样.试着go 掉viewController.present(...)个.这是我的代码:

let windowScene = UIApplication.shared
                .connectedScenes
                .filter { $0.activationState == .foregroundActive }
                .first
if let windowScene = windowScene as? UIWindowScene {
    popupWindow = UIWindow(windowScene: windowScene)
}

然后我会像你一样展示它:

popupWindow?.frame = UIScreen.main.bounds
popupWindow?.backgroundColor = .clear
popupWindow?.windowLevel = UIWindow.Level.statusBar + 1
popupWindow?.rootViewController = self as? UIViewController
popupWindow?.makeKeyAndVisible()

无论如何,我个人认为问题出在viewController.present(...),因为你展示了一个带有控制器的窗口,并立即呈现出一些"self ",所以这取决于"self "到底是什么.

还值得一提的是,我存储了一个对从我的控制器中移动的窗口的引用.如果这对你仍然是无用的,我只能展示我的小repo使用此代码.查看AnyPopupController.swiftPopup.swift文件.

希望能有帮助,@SirOz

Swift相关问答推荐

如何在Swift中获得与Python相同的HMAC—SHA512签名?

如何把多个可观测性变成一个完备性?

声明一个协议时使用和不使用任何单词有什么区别?

允许视图在视图内更改

从 Obj-C 函数返回 swift 类的不兼容指针类型

在Equatable上引用运算符函数==要求Dictionary.Values符合Equatable

需要将 json 映射到 Swift 中的模型

如何在 SwiftUI 中获取视图的位置

Swift 非参与者隔离闭包

SwiftUI:决定键盘重叠的内容

关联满足约束时的快速协议方法

P384 公钥获取IncorrectParameterSize

Swift初始化具有可变ID的重复值数组

临时添加到视图层次 struct 后,Weak view引用不会被释放

如何在界面生成器中创建 UILayoutGuide?

为 UIActivityViewController Swift 设置不同的活动项

无法分配给属性:self 是不可变的,我知道如何修复但需要理解

如何在 Swift 中遍历 struct 属性?

Swift performSegueWithIdentifier 不起作用

如何在椭圆形或圆形上裁剪 UIImage?