2016-11-23 14 views
1

私はこの問題で壁に頭を抱えていましたが、iOS 10.1に更新したので、UIApplication.shared.keyWindowに追加されたビューはレンダリングされません。それは単に目に見えません。iOS 10のUIApplication.shared.keyWindowにUIViewが追加されていません

私はiOS 9.3.2でテスト電話を実行していますが、追加されたビューは表示されます。

NB:私はこれを長い間「アプリ内通知」を表示するために使用しており、魅力的な働きをしています。

VERYシンプルなコードであり、何らかのエラーを投げることはありません。

ウィンドウがnilでないと完全に有効なフレームを持っています

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などに入れようとしました...しかし、役に立たないです。

アイデア?他の誰かが同じ問題に直面していますか?

EDIT: は以下のコメントのいくつかを見て、私は明確にする必要があると考えている。(私はアップル社のマニュアルの参照を取る場合)、コードのこの作品はを動作するはずです。また、問題はiOS 10固有です。バージョン< iOS 10では完全に動作します。

だから私は、これはと呼ばれるを捜しているわけではないが、この動作をもたらすことのiOS 10に変更されているかもしれないものではなく、むしろために呼び出す必要があります。

ありがとうございました

+0

ウィンドウのrootviewcontrollerに追加しようとしました – Vinodh

+0

また試しました。また、iOS 10では動作しませんが、iOS 9で動作しています。 – Benjamin

+0

UIApplication.shared.keyWindow?.makeKeyAndVisible() – zombie

答えて

0

私は解決策を見つけましたが、それは非常に奇妙です。 私たちのプロジェクトでは、私たちはdeeplinkingのためにHOKO Linksを使用しており、HOOSはfunc application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool(Facebook、Google Sign in ...)のすべてのイベントを "盗んで"いました。

我々は鉾からみんなにバグを提出し、「iOS9より大きいバージョン」のための彼らのコードをスキャンして犯人を追跡するために管理し、以下の方法accrossに来た:

- (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 
    } 
} 

ソリューションを削除しました我々はまた、が0に窓アルファを設定していることに気づい #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000#endif[self requestDeferredDeeplink];

と交換との間のすべてのコード... およびTHATは、keyWindowに追加されたUIViewsが表示されないようにしていたものです。しかし、不思議なことに、それはアプリケーションの残りの部分に影響を与えていませんでした。

他の誰かがこの問題に遭遇する可能性はありますが、私は後世のためにここに残しています。

関連する問題