我正在尝试将自定义视图控制器呈现给iOS 13中的外部连接屏幕。我遵循了本教程:
我有以下代码:
/// A private method used to setup a external screen with a window
/// loaded with a ExternalScreenViewController
///
/// - parameter screen: A UIScreen object to connect the
/// ExternalScreenViewController too
private func setupExternalScreen(screen: UIScreen) {
guard externalWindow == nil,
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("ExternalScreen") as? ExternalScreenViewController else {
return
}
externalWindow = UIWindow(frame: screen.bounds)
externalWindow!.rootViewController = vc
externalWindow!.screen = screen
externalWindow!.hidden = false
}
在[C0行中,我在Xcode 11.4.1控制台中收到错误:
[Assert] UIKit客户端中的错误:如果客户端采用UIScene生命周期,则不应调用-[UIWindow setScreen:]。调用-[UIWindow setWindowScene:]。
自定义视图控制器未显示在外部显示器中。
我应该改变什么?我想同时处理iOS 13.x和以前的设备。
[在iOS 13设备中,不要设置externalWindow!.screen = screen
,而应在screen
对象上设置windowScene
。在此之前,您应该从externalWindow
的连接场景中找出匹配的windowScene
。修改后的方法如下:
UIApplication
注意:我们建议将private func setupExternalScreen(screen: UIScreen) {
guard externalWindow == nil,
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("ExternalScreen") as? ExternalScreenViewController else {
return
}
externalWindow = UIWindow(frame: screen.bounds)
externalWindow!.rootViewController = vc
var sceneHasBeenSet = false
if #available(iOS 13.0, *) {
let scenes = UIApplication.shared.connectedScenes
for aScene in scenes {
if let windowScene = aScene as? UIWindowScene {
// Look for UIWindowScene that has matching screen
if (windowScene.screen == screen) {
// Set windowScene here, no need to set screen
externalWindow!.windowScene = windowScene
sceneHasBeenSet = true
}
}
}
}
if false == sceneHasBeenSet {
// Set screen the traditional way
externalWindow!.screen = screen
}
externalWindow!.isHidden = false
}
设置为不推荐使用isHidden
。