-
iOS 13
以后蘋果增加了SceneDelegate
來管理窗口箱熬。
-
iOS 13
以前自定義個(gè)Window
進(jìn)行顯示,下面兩種方式都可以- 方式一:
let newWindow = UIWindow() newWindow.frame = CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height) newWindow.backgroundColor = UIColor.red newWindow.isHidden = false
- 方式二:
let newWindow = UIWindow() newWindow.frame = CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height:UIScreen.main.bounds.size.height) newWindow.backgroundColor = UIColor.red newWindow.windowLevel = UIWindow.Level.alert newWindow.makeKeyAndVisible()
- iOS 13 以后新建或自定義的
Window
必須注冊(cè)到 ``SceneDelegate 中Swift
if #available(iOS 13.0, *) { // 通知注冊(cè)方式看場景進(jìn)行添加扣孟,不需要可以去除 NotificationCenter.default.addObserver(forName: UIScene.willConnectNotification, object: nil, queue: nil) { (note) in newWindow.windowScene = note.object as? UIWindowScene } // 主要注冊(cè) for windowScene in UIApplication.shared.connectedScenes { if (windowScene.activationState == UIScene.ActivationState.foregroundActive) { newWindow.windowScene = windowScene as? UIWindowScene } } }
-
OC
注冊(cè)
if (@available(iOS 13.0, *)) { // 通知注冊(cè)方式看場景進(jìn)行添加,這里我就不寫了 // 主要注冊(cè) for (UIWindowScene *windowScene in [UIApplication sharedApplication].connectedScenes) { if (windowScene.activationState == UISceneActivationStateForegroundActive) { newWindow.windowScene = windowScene; break; } } }
注意:
- 在有些方法中注冊(cè)時(shí)
[UIApplication sharedApplication].connectedScenes
為空批糟,可以 延時(shí) 進(jìn)行注冊(cè),比如didFinishLaunchingWithOptions
方法執(zhí)行時(shí)會(huì)為空控汉。