gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:23:14 24 4
gpt4 key购买 nike

我一直在用这个问题撞墙,但自从我更新到 iOS 10.1 后,添加到 UIApplication.shared.keyWindow 的任何 View 似乎都没有渲染。它根本不可见。

我碰巧有一部运行 iOS 9.3.2 的测试手机,添加的 View 确实可见。

注意:我很长时间以来一直在使用它来显示“应用程序内通知”,而且效果非常好。

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

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 也是如此,它确实出现在 View 层次结构中。我也尝试过移动代码,将其放入 ViewDidAppear、ViewDidLayoutSubViews 等......但无济于事。

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

编辑:看到下面的一些评论,我想我需要澄清一下:这段代码应该可以(如果我引用了 Apple 文档)。此外,该问题是 iOS 10 特有的。在 < iOS 10 的版本中,它可以完美运行。

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

谢谢

最佳答案

我完全是偶然找到了解决方案,而且很奇怪。在我们的项目中,我们使用 HOKO Links 进行深度链接,我们遇到了 iOS 10 的错误:HOKO 正在“窃取”func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation) 中的所有事件: 任何) -> 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 ......THAT 是阻止添加到 keyWindowUIViews 可见的原因。然而,奇怪的是,它并没有影响应用程序的其余部分。

我怀疑其他人可能会遇到这个问题,但我把它留在这里留给后代。

关于ios - iOS 10 中添加到 UIApplication.shared.keyWindow 的 UIView 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40763013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com