2016-11-23 2 views
1

Ich habe mit diesem Problem meinen Kopf gegen die Wand geschlagen, aber seit ich auf iOS 10.1 aktualisiert, scheint keine Ansicht UIApplication.shared.keyWindow hinzugefügt zu werden . Es ist einfach unsichtbar.UIView hinzugefügt zu UIApplication.shared.keyWindow in iOS 10 ist nicht sichtbar

Ich habe zufällig ein Testtelefon mit iOS 9.3.2 läuft darin und die hinzugefügten Ansichten erscheinen DO sichtbar.

NB: Ich benutze dies für eine lange Zeit, um "in App-Benachrichtigungen" zu zeigen, und es hat wie ein Charme funktioniert.

Es ist ein VERY einfaches Stück Code und wirft keinerlei Fehler.

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) 

Ich habe folgende geprüft:

das Fenster nicht gleich Null ist und einen absolut gültigen Rahmen. Gleiches gilt für die UIView, die ich hinzufüge, und sie wird in der Ansichtshierarchie angezeigt. Ich habe auch versucht, den Code umherzubewegen, ihn in ViewDidAppear, ViewDidLayoutSubViews etc ... zu setzen, aber ohne Erfolg.

Irgendwelche Ideen? Hat sonst noch jemand das gleiche Problem?

EDIT: unten sind einige der Kommentare sehen, ich glaube, ich klären müssen: dieses Stück Code sollte arbeiten (wenn ich Bezug auf Apple-Dokumentation übernehmen). Außerdem ist das Problem iOS 10 spezifische. In den Versionen < iOS 10 funktioniert es einwandfrei.

So suchen Ich bin nicht für wo dies genannt sollte aufgerufen werden, sondern für was haben in iOS 10 geändert, dass dieses Verhalten bringen würde. Völlig

Dank

+0

versuchen, rootviewcontroller des Fensters – Vinodh

+0

hinzufügen Auch versucht. Funktioniert auch nicht in iOS 10, aber funktioniert in iOS 9. – Benjamin

+0

hast du versucht, UIApplication.shared.keyWindow? .makeKeyAndVisible() – zombie

Antwort

0

zufällig fand ich die Lösung, und es ist sehr seltsam. In unserem Projekt benutzen wir HOKO Links zum Deeplinking und wir haben einen Fehler mit iOS 10 festgestellt: HOKO hat alle Ereignisse in func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool (Facebook, Google Anmelden ...) "gestohlen".

Wir reichten einen Fehler an die Jungs von HOKO und verwaltet den Täter aufzuspüren durch ihren Code scannen für „Version größer als iOS9“ und kam quer durch das folgende Verfahren:

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

Die Lösung zu entfernen war die gesamte Code zwischen #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 und #endif und ersetzt mit [self requestDeferredDeeplink];

Wir bemerkten auch, dass HOKO das Fenster alpha auf 0 einstellen ... Und DAS ist, was verhindert wurde UIViews hinzugefügt, um die keyWindow sichtbar zu sein. Seltsamerweise hat es den Rest der App jedoch nicht beeinflusst.

Ich bezweifle, dass jemand anderes auf dieses Problem stoßen wird, aber ich lasse das hier für die Nachwelt.

Verwandte Themen