2015-04-24 28 views
6

che sto affrontando una strana iOS 8.3 questione che mostra una tastiera su un orientamento sbagliato come questo (il controller della vista è in modalità paesaggio, ma la tastiera compare in modalità verticale):iOS 8.3 tastiera orientamento bug

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

posso attivare questo problema seguendo questi passaggi:

  1. creare 2 UIViewController sottoclasse: ViewControllerA e ViewControllerB

  2. in ViewControllerA implementare supportedInterfaceOrientations e tornare UIInterfaceOrientationMaskPortrait

  3. in ViewControllerB implementare supportedInterfaceOrientations e tornare UIInterfaceOrientationMaskLandscape

  4. Creare una sottoclasse UINavigationController chiamato NavigationController, implementare supportedInterfaceOrientations e tornare [self.topViewController supportedInterfaceOrientations] (sto facendo questo perché voglio mantenere il NavigationController ed è rootVC dalla rotazione)

  5. U se la NavigationController come iniziale vista controllore dell'applicazione, impostare ViewControllerA come rootViewContrller

  6. lancio s' il NavigationController l'applicazione, ViewControllerA sarà mostrato in ritratto. Mostra un pulsante sulla ViewControllerA, premere il pulsante presenterà ViewControllerB utilizzando presentViewController:animated:completion

  7. ViewControllerB apparirà in Landscape; Mostra un campo di testo su ViewControllerB, tocca il campo di testo per attivare la tastiera, ma la tastiera è in modalità Ritratto, proprio come l'immagine sopra.

PS. È possibile scaricare ed eseguire il progetto Xcode on github

Questo problema sembra essere visualizzato solo su iOS 8.3. Sto facendo qualcosa di sbagliato ? O forse questo è solo un altro bug di iOS?

A proposito, questo problema non si verificherà se si visualizza solo ViewControllerA direttamente senza ViewController. Quindi, se questo è un bug di iOS, come posso evitare la sottoclasse di UINavigationController ma mantenere ancora ViewControllerA che è il rootViewController di un UINavigationController di rotazione.


UPDATE: Questo bug appare ancora su iOS 8.4, ho sparato un bug report e ottenuto risposte da parte di Apple il 17 giugno 2015, hanno detto che è stato affrontato negli ultimi iOS 9 beta.

risposta

2

Abbiamo risolto questo problema inducendo il dispositivo a pensare che fosse stato ruotato in un diverso orientamento e quindi nell'orientamento previsto.

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    self.segmentedControl.selectedSegmentIndex = 0; 
    if(!self.rotatingForDismissal) 
    { 
     [self.tableNumberTextField becomeFirstResponder]; 
    } 


    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.3")) 
    { 
     [[UIDevice currentDevice] setValue:@(UIDeviceOrientationLandscapeLeft) forKey:@"orientation"]; 
     [[UIDevice currentDevice] setValue:@(self.interfaceOrientation) forKey:@"orientation"]; 
    } 

} 
+0

Sì! Questa è una soluzione molto migliore della mia. Grazie ! – ultragtx

+0

Sto usando GoogleMap 1.9.0 e ancora non funziona –

3

ho chiesto un supporto tecnico e hanno detto

I nostri ingegneri hanno esaminato la sua richiesta e hanno stabilito che questo sarebbe meglio gestita come un bug report.

Quindi sembra confermato un bug di sistema.

E la mia soluzione attuale è l'aggiunta di un ViewControllerC (supporta sia verticale e orizzontale) fra ViewControllerA e ViewControllerB: ViewControllerA dovrebbe presentare ViewControllerC con l'animazione, dopo ViewControllerC apparso, presente ViewControllerB senza animazione.

Per rendere naturale la transizione, è possibile impostare lo stesso colore di sfondo di ViewControllerB su ViewControllerC oppure eseguire una schermata di ViewControllerB e aggiungerla a ViewControllerC come immagine di sfondo.

Non è una soluzione perfetta, per gli utenti, possono scoprire ViewControllerB richiede più tempo per caricare.

+0

Hai inoltrato un radar a questo problema? Vedere lo stesso problema da iOS 8.3 – user1165756

0

Sono riuscito a far apparire correttamente la tastiera utilizzando quanto segue.

- (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"]; 
    } 
} 

noti che usare UIDeviceOrientationUnknown non provoca effetti collaterali come inadeguato Rotazione automatica di punti di vista.

Problemi correlati