在iOS12及以下版本中,我使用类似于以下内容的方法来显示一个窗口,以覆盖我的应用程序内容并置于最上方。这种方法曾经有效,但在iOS13测试版中不再起作用了。
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var coverWindow: UIWindow?
func applicationDidEnterBackground(_ application: UIApplication) {
if self.coverWindow != nil {
// Skip since cover window is already showing
return
}
let vc = UIViewController()
let label = UILabel(frame: window!.bounds)
label.text = "CoverWindow. Tap to app see contents"
vc.view = label
vc.view.backgroundColor = UIColor.lightGray
let coverWindow = UIWindow(frame: window!.bounds)
coverWindow.rootViewController = vc
coverWindow.windowLevel = .alert
coverWindow.makeKeyAndVisible()
self.coverWindow = coverWindow
}
}
显然,窗口更改直到应用程序再次进入前台才会在屏幕上显示。
问题
有人知道如何修复或解决这个问题吗?或者这种方法是不正确的?
任何帮助都将不胜感激
注意事项
我不使用简单的视图,因为我的应用程序可能也会显示其他窗口,而且我的要求是覆盖所有内容。
我不使用
applicationWillResignActive
,因为我们只想在应用程序进入后台时显示 coverWindow。(TouchID身份验证和其他操作可能会触发applicationWillResignActive
,导致 coverWindow 错误显示)
示例代码
下载完整的工作示例代码,请访问Github(在iOS模拟器12和13中运行以查看差异)
applicationWillResignActive
,这样做更可靠。当用户返回活动状态时,可以显示touchID。 - Tj3n