2015-04-24 3 views
6

ich ein seltsame iOS 8.3 Problem bin vor, die wie folgt (der View-Controller ist im Querformat-Modus, aber die Tastatur erscheint im Hochformat-Modus) eine Tastatur auf einer falschen Ausrichtung zeigt:iOS 8.3 Tastatur Orientierung Bug

the view controller is in Landscape mode, but the keyboard show up in Portrait mode

ich dieses Problem, indem Sie folgende Schritte auslösen können:

  1. erstellen 2 UIViewController SubClass: ViewControllerA und ViewControllerB

  2. in ViewControllerAsupportedInterfaceOrientations implementieren und zurück UIInterfaceOrientationMaskPortrait

  3. in ViewControllerBsupportedInterfaceOrientations implementieren und das Rück UIInterfaceOrientationMaskLandscape

  4. eine NavigationController genannt UINavigationController Unterklasse erstellen, implementieren supportedInterfaceOrientations und zurück [self.topViewController supportedInterfaceOrientations] (ich das tue, weil ich halten möchte die NavigationController und es rootVC von rotierende)

  5. U se die NavigationController als Anfangs View-Controller der App, setzen ViewControllerA als die NavigationController ‚s rootViewContrller

  6. Starten Sie die App, ViewControllerA in Portrait angezeigt wird. Zeigen Sie auf eine Schaltfläche auf ViewControllerA, drücken Sie die Taste präsentieren ViewControllerB unter Verwendung presentViewController:animated:completion

  7. ViewControllerB wird in Landschaft auftauchen; Zeigen Sie ein Textfeld auf ViewControllerB, tippen Sie auf das Textfeld wird die Tastatur auslösen, aber die Tastatur befindet sich im Hochformat-Modus, genau wie das Bild oben.

PS. Sie können das Xcode-Projekt herunterladen und ausführen on github

Dieses Problem scheint nur auf iOS 8.3 angezeigt. Mache ich etwas falsch ? Oder ist das nur ein weiterer Fehler von iOS?

Übrigens, dieses Problem tritt nicht auf, wenn Sie einfach ViewControllerA direkt ohne ViewController anzeigen. Also, wenn dies ein Fehler von iOS ist, wie kann ich Unterklasse UINavigationController vermeiden, aber immer noch ViewControllerA, die der rootViewController einer UINavigationController von rotierenden ist.


UPDATE: Dieser Fehler erscheint immer noch auf iOS 8.4, ich einen Fehlerbericht gefeuert und bekam Antworten von Apple am 17. Juni 2015 sagten, dass sie es in dem neuesten iOS 9 Beta adressiert wurde.

Antwort

2

Wir haben dieses Problem gelöst, indem wir das Gerät dazu gebracht haben zu glauben, dass es in eine andere Ausrichtung gedreht wurde und dann in seine beabsichtigte Ausrichtung.

+0

Yeah! Dies ist eine viel bessere Lösung als meine. Vielen Dank ! – ultragtx

+0

Ich verwende GoogleMap 1.9.0 und funktioniert immer noch nicht –

3

Ich habe einen technischen Support gefragt und sie sagte

Unsere Ingenieure Ihre Anfrage überprüft haben und haben festgestellt, dass dies am besten als Fehlerbericht behandelt werden.

So scheint es, dass es einen Systemfehler bestätigt.

Und meine aktuelle Lösung ist ein Hinzufügen eines ViewControllerC (Unterstützung Hoch-und Querformat) zwischen ViewControllerA und ViewControllerB: ViewControllerA sollte ViewControllerC mit Animation präsentieren, nachdem ViewControllerC erschien, präsentieren Sie ViewControllerB ohne Animation.

Damit der Übergang natürlich aussieht, können Sie ViewControllerC die gleiche Hintergrundfarbe wie ViewControllerB zuweisen oder einen Screenshot von ViewControllerB als Hintergrundbild zu ViewControllerC hinzufügen.

Es ist keine perfekte Lösung, für Benutzer können sie feststellen, dass ViewControllerB mehr Zeit zum Laden braucht.

+0

Haben Sie ein Radar für dieses Problem erstellt? Sieht das gleiche Problem von iOS 8.3 – user1165756

0

Ich war in der Lage, die Tastatur korrekt erscheinen zu lassen, indem ich folgendes benutze.

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    if (SYSTEM_VERSION_GREATER_THAN(@"7.1") && SYSTEM_VERSION_LESS_THAN(@"9.0")) 
    { 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    [[UIDevice currentDevice] setValue:@(UIDeviceOrientationUnknown) forKey:@"orientation"]; 
    [[UIDevice currentDevice] setValue:@(orientation) forKey:@"orientation"]; 
    } 
} 

Beachten Sie, dass UIDeviceOrientationUnknown nicht mit Nebenwirkungen wie unangemessene automatische Rotation der Ansichten verursacht.