通过设置window.windowLevel进行多窗口排列在iOS 13上有效,但在iOS 12上无效
在我们的应用程序中,我们在3个不同的通过设置window.windowLevel进行多窗口排列在iOS 13上有效,但在iOS 12上无效,ios,swift,ios12,uiwindow,ios13.1.2,Ios,Swift,Ios12,Uiwindow,Ios13.1.2,在我们的应用程序中,我们在3个不同的UIWindows上提供了3个视图控制器 我们对这些情态动词的安排有意见。我试图通过调整每个UIWindow的window.windowLevel属性来解决这个问题 由于未知原因,该修复程序在iOS 13.1.2上运行,但在iOS 12.1.1上运行不正常。有什么想法吗?谢谢。我相信windowLevel根本不是您要找的房产。即使该属性有效或应该有效,它也是偶然的,因为该属性描述的窗口显示样式多于窗口的顺序 您可以继续删除/添加窗口,甚至将其作为普通API的一
UIWindow
s上提供了3个视图控制器
我们对这些情态动词的安排有意见。我试图通过调整每个UIWindow
的window.windowLevel
属性来解决这个问题
由于未知原因,该修复程序在iOS 13.1.2上运行,但在iOS 12.1.1上运行不正常。有什么想法吗?谢谢。我相信
windowLevel
根本不是您要找的房产。即使该属性有效或应该有效,它也是偶然的,因为该属性描述的窗口显示样式多于窗口的顺序
您可以继续删除/添加窗口,甚至将其作为普通API的一部分隐藏。或者你可以在你想在顶部看到的窗口上使用makeKeyAndVisible
请参见下面的用法快速示例:
class ViewController: UIViewController {
private static var windows: [UIWindow] = {
let colors: [UIColor] = [.red, .blue, .green]
return colors.map { color in
let window: UIWindow
if #available(iOS 13.0, *) {
let scene = UIApplication.shared.windows.first!.windowScene!
window = UIWindow(windowScene: scene)
} else {
// Fallback on earlier versions
window = UIWindow(frame: UIScreen.main.bounds)
}
window.rootViewController = {
let controller = ViewController()
controller.view.backgroundColor = color
return controller
}()
window.makeKeyAndVisible()
return window
}
}()
private static var windowIndex: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onTap)))
}
@objc private func onTap() {
let actualIndex = ViewController.windowIndex%ViewController.windows.count
ViewController.windows[actualIndex].makeKeyAndVisible()
ViewController.windowIndex += 1
}
}
延迟加载3个窗口,每个窗口都有一个具有自己独特颜色的视图控制器。当你点击屏幕时,“下一步”窗口应该出现在顶部,这样你就可以在窗口之间切换
更安全的实施可能与以下内容一样简单:
@objc private func onTap() {
let actualIndex = ViewController.windowIndex%ViewController.windows.count
ViewController.windows.enumerated().forEach { index, window in
if index == actualIndex {
window.makeKeyAndVisible()
} else {
window.isHidden = true
}
}
ViewController.windowIndex += 1
}