iOS 13 之后自定义 Window 不显示解决 (SceneDelegate)

  • iOS 13 以后苹果增加了 SceneDelegate 来管理窗口。

  • iOS 13 以前自定义个 Window 进行显示,下面两种方式都可以

    • 方式一:

      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 必须注册到 SceneDelegate

    • swift

      if #available(iOS 13.0, *) {
         // 通知注册方式看场景进行添加,不需要可以去除
         NotificationCenter.default.addObserver(forName: UIScene.willConnectNotification, object: nil, queue: nil) { (note) in
             newWindow.windowScene = note.object as? UIWindowScene
         }
         // 主要注册
         for windowScene in UIApplication.shared.connectedScenes {
             if (windowScene.activationState == UIScene.ActivationState.foregroundActive) {
                 newWindow.windowScene = windowScene as? UIWindowScene
             }
         }
      }
      
    • OC 注册

      if (@available(iOS 13.0, *)) {
        // 通知注册方式看场景进行添加,这里我就不写了
        // 主要注册
        for (UIWindowScene *windowScene in [UIApplication sharedApplication].connectedScenes) {
            if (windowScene.activationState == UISceneActivationStateForegroundActive) {
                newWindow.windowScene = windowScene;
                break;
            }
        }
      }
      
  • 在有些方法中注册时 [UIApplication sharedApplication].connectedScenes 为空,可以 延时 进行注册,比如 didFinishLaunchingWithOptions 方法执行时会为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡尔特斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值