2014-10-09 14 views
5

Questo è solo un problema di iOS 8, la tastiera viene visualizzata correttamente in iOS 7 con cambio di orientamento del dispositivo. La mia applicazione supporta sia l'orientamento verticale che orizzontale e utilizza l'autolayout.iOS 8 Modifica dell'orientamento: la cornice della tastiera non viene visualizzata correttamente

Se si spinge una sottoclasse UIViewController che contiene una sottoclasse UITextField su uno stack di navigazione e UITextField diventa il primo risponditore in orientamento verticale, la tastiera predefinita viene visualizzata correttamente. Tuttavia, se si ruota il dispositivo in posizione orizzontale, i layout di sottoview di UIViewController vengono visualizzati correttamente ma la tastiera viene visualizzata nella parte superiore centrale dello schermo. L'orientamento della tastiera è corretto per l'orientamento orizzontale, ma la sua larghezza del fotogramma è uguale a quella prevista per l'orientamento verticale. Se imposto l'orientamento dell'app solo sull'orientamento orizzontale, la tastiera non viene visualizzata correttamente. Questo è solo un problema per il cambiamento dell'orientamento di iOS 8.

+2

Sto pensando che questo potrebbe essere un bug di iPhone 6. – MobileDev98

risposta

4

Prima di iOS 8, la posizione e la larghezza/altezza della tastiera erano sempre relative all'orientamento verticale quando segnalate all'app. (ad esempio, la larghezza della tastiera di Landscape è nella direzione y, ~ 352 pixel su un iPad.) A partire da iOS 8, questo è stato aggiornato per avere sempre (0,0) in alto a sinistra nella vista (fisica) e la larghezza/height riflette l'orientamento x/y che normalmente ti aspetteresti al di fuori di iOS. Se in precedenza avevi posizionato la tastiera con qualcosa come keyboardDidShow[notification userInfo], otterrai numeri che non hanno alcun senso. È possibile utilizzare qualcosa in questo senso per tenere conto delle pre-iOS 8 idiosincrasie:

- (void)keyboardDidShow: (NSNotification *) notification{ 

    NSDictionary *keyboardInfo = [notification userInfo]; 
    CGSize keyboardSize = [[keyboardInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    float height, width; 
    if(UIInterfaceOrientationIsPortrait(orientation)){ 
     width = keyboardSize.width; 
     height = keyboardSize.height; 
    } else { 
     if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1){ 
      width = keyboardSize.height; 
      height = keyboardSize.width; 
     } else { 
      width = keyboardSize.width; 
      height = keyboardSize.height; 
     } 
    } 

    // Remainder of function 
} 

Che può essere riscritta fino a ...

- (void)keyboardDidShow: (NSNotification *) notification{ 

    NSDictionary *keyboardInfo = [notification userInfo]; 
    CGSize keyboardSize = [[keyboardInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    float width = keyboardSize.width; 
    float height = keyboardSize.height; 
    if(!UIInterfaceOrientationIsPortrait(orientation) && (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1)){ 
     width = keyboardSize.height; 
     height = keyboardSize.width; 
    } 

    // Remainder of function 
} 

Inoltre, il 8.1 aggiornamento diversi paesaggio/rotazione fissa bug probabilmente correlati al cambiamento di cui sopra. Prendi l'aggiornamento e vedi se questo risolve il tuo problema.

3

Non è un bug di iOS8 o iPhone 6. È un problema di migrazione corretta di vecchi progetti in xCode6.

È sufficiente aggiungere la chiave Launch screen interface file base name al file Info.plist.

Spiegazione dettagliata di questo caso è possibile trovare here.

Problemi correlati