先看结论:
(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;
}
}
}
}
}
网友评论