Nadeal

您现在的位置是:首页>所属分类

所属分类

“keyWindow”带来的思考

Nadeal2022年5月17日 10:47个人博客1264
“keyWindow”在使用的时候,出现了警告⚠️提示。告诉我说iOS13.0以后已经遗弃了这种做法,但是我们也知道遗弃不代表禁用,毕竟苹果也是要考虑到版本的兼容性。

事情比较简单,就是我想要把一个UIView置顶,做法一般是引用一个“keyWindow”,

 [[UIApplication sharedApplication].keyWindow addSubview:self];

结果被提示了一下:

'keyWindow' is deprecated: first deprecated in iOS 13.0 - Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes

现在都是iOS15.0在盛行了,怎么会有iOS13的警告提示。嗯!!!必须处理一下,查一查资料什么的。

有人说这种做法:

[[UIApplication sharedApplication].windows.firstObject addSubview:self];

一看代码,简单~So Easy~果然是典型的拿来主义。

然后,Emo时刻到了,又被警告提示了一下:

'windows' is deprecated: first deprecated in iOS 15.0 - Use UIWindowScene.windows on a relevant window scene instead

似乎Xcode在告诉我,:小伙子,你还是太年轻了!!!

的确,不能大意了。每一次iOS的大版本升级,都是需要我们去注意的,特别是在Beta版本的时候。最后,我还是乖乖的写上版本兼容:

if (@available(iOS 15, *)) {
        __block UIScene * _Nonnull tmpSc;
        [[[UIApplication sharedApplication] connectedScenes] enumerateObjectsUsingBlock:^(UIScene * _Nonnull obj, BOOL * _Nonnull stop) {
            if (obj.activationState == UISceneActivationStateForegroundActive) {
                tmpSc = obj;
                *stop = YES;
            }
        }];
        UIWindowScene *curWinSc = (UIWindowScene *)tmpSc;
        [curWinSc.keyWindow addSubview:self];
    } else {
        [[UIApplication sharedApplication].windows.firstObject addSubview:self];
    }

写完这个以后,我又陷入了一个思考:iOS16什么时候出来,又会带来什么样的特性?