iOS13 SceneDelegate自定义Window显示

2022-03-16  本文已影响0人  笔头还没烂

先看结论:
(1)iOS 13以上 window不再由AppDelegate来管理,所以通过AppDelegate来设置keyWindowAndVisable不会显示我们的自定义Window;需通过connectedScenes来获取处于活跃状态的Scene,并将window的windowScene设置为活跃状态的Scene,完成windowScene的注册。此时该window则由该Scene来管理,才能显示。
(2)iOS13以下 window 的 windowScene 属性有值;iOS13以上 window 的 windowScene 属性无值,需要手动赋值;

代码如下:
调用该方法,传入需要显示的自定义window即可。


+ (void)iOS13ShowCustomWindowWithWindow:(UIWindow *)window {
    if (@available(iOS 13.0, *)) {
        NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects];
        //iOS 13以上 window不再由AppDelegate来管理,所以通过AppDelegate来设置keyWindowAndVisable无效;需通过connectedScenes来获取处于活跃状态的Scene,并将window的windowScene设置为活跃状态的Scene,完成windowScene的注册。此时该window则由该Scene来管理,才能显示
        //iOS13以下 window 的 windowScene 属性有值;iOS13以上 window 的 windowScene 属性无值,需要手动赋值
        if (!window.windowScene) {
            for (UIWindowScene *windowScene in array) {
                if (windowScene.activationState == UISceneActivationStateForegroundActive) {
                    window.windowScene = windowScene;
                    return;
                }
            }
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读