我一直在讨论这个问题,但自从我更新到 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中会带来这种行为。
由于
答案 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的其余部分。
我怀疑其他人是否可能会遇到这个问题,但我将此留在这里作为后人。