UIView添加到iOS 10中的UIApplication.shared.keyWindow不可见

时间:2016-11-23 11:16:40

标签: ios swift uiview ios10 hoko

我一直在讨论这个问题,但自从我更新到 iOS 10.1 后,添加到UIApplication.shared.keyWindow的任何视图似乎都没有渲染。它简直是看不见的。

我碰巧在其中运行了 iOS 9.3.2 的测试手机,添加的视图显示为DO。

注意:我已经使用了很长时间来显示应用程序通知"它一直像一个魅力。

这是一个非常简单的代码,不会抛出任何错误。

let view = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))

view.backgroundColor = UIColor.red

let window = UIApplication.shared.keyWindow

window?.addSubview(view)

我检查过以下内容:

窗口不是零,并且具有完全有效的帧。 我添加的UIView也是如此,它确实出现在视图层次结构中。 我也试过移动代码,把它放在ViewDidAppear,ViewDidLayoutSubViews等......但无济于事。

有什么想法吗?还有其他人面临同样的问题吗?

修改: 看到下面的一些评论,我相信我需要澄清一下:这段代码应该可以工作(如果我参考Apple文档)。此外,问题是 iOS 10特定。在版本< iOS 10完美运行。

所以我不是在寻找 这个调用应该被调用,而是 可能已经改变了在iOS 10中会带来这种行为。

由于

1 个答案:

答案 0 :(得分:0)

我偶然发现了解决方案,这很奇怪。 在我们的项目中,我们使用HOKO链接进行深层链接,我们遇到了iOS 10的错误:HOKO正在“窃取”func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool中的所有活动(Facebook,Google登录...)。

我们向HOKO的人员提交了一个错误,并设法通过扫描他们的代码“版本大于iOS9”来追踪罪魁祸首,并采用以下方法:

- (void)requestDeferredDeeplink:(void (^)(NSString *))handler {

    BOOL isFirstRun = ![[HOKUtils     objectForKey:HOKDeferredDeeplinkingNotFirstRun] boolValue];

    if (isFirstRun) {
        self.handler = handler;

#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000
    if (HOKSystemVersionGreaterThanOrEqualTo(@"9.0")) {

        NSString *fingerprintURL = [NSString stringWithFormat:@"%@?uid=%@", [HOKNetworkOperation urlFromPath:HOKFingerprintMatchingPath], [HOKDevice device].uid];
        self.safariViewController = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:fingerprintURL]];
        self.safariViewController.delegate = self;

        UIViewController *rootViewController = [[UIViewController alloc] init];

        UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectZero];
        window.rootViewController = rootViewController;
        [window makeKeyAndVisible];
        window.alpha = 0;

        [rootViewController presentViewController:self.safariViewController animated:NO completion:nil];
    } else {
        [self requestDeferredDeeplink];
    }
#else
    [self requestDeferredDeeplink];
#endif
  }
}

解决方案是删除之间的所有代码 #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000#endif并替换为[self requestDeferredDeeplink];

我们还注意到 HOKO 窗口alpha设置为0 ...... 并且那个是阻止UIViews添加到keyWindow可见的内容。然而,奇怪的是,它并没有影响App的其余部分。

我怀疑其他人是否可能会遇到这个问题,但我将此留在这里作为后人。