Ho un controller di visualizzazione in ascolto per UIKeyboardWillShowNotification e UIKeyboardWillHideNotification. I gestori di queste notifiche regolano varie parti della vista, che è una procedura standard.Tastiera "WillShow" e "WillHide" rispetto alla rotazione
Il codice seguente viene utilizzato per convertire il rect tastiera dalla schermata coordinate:
CGRect keyboardBounds = [self.view convertRect:[keyboardBoundsValue CGRectValue] fromView:nil];
Nuovamente, la procedura standard. Sfortunatamente, c'è una situazione critica in cui questa conversione fallisce. Osserva cosa succede quando un iPhone viene ruotato da verticale a orizzontale mentre la tastiera è dispiegata:
1) iOS attiva automaticamente UIKeyboardWillHideNotification; self.interfaceOrientation è segnalato come portrait; keyboardBounds.height è 216,0. Questo ha senso. Perché? Poiché al gestore di notifiche viene data la possibilità di "ripulire" prima che la vista passi alla modalità orizzontale.
2) iOS attiva automaticamente UIKeyboardWillShowNotification; self.interfaceOrientation è segnalato come portrait; keyboardBounds.height è 480,0. Questo NON ha senso. Perchè no? Perché il gestore delle notifiche farà il suo lavoro pensando che l'altezza della tastiera sia 480.0!
La mela ha lasciato cadere la palla su questo, o sto facendo qualcosa di sbagliato?
Si prega di notare che l'ascolto invece per UIKeyboard ha ShowNotification non è una soluzione valida, perché degrada in modo significativo l'esperienza dell'utente. Perché? Poiché l'animazione delle mie modifiche alla vista dopo l'animazione di distribuzione della tastiera avviene ... beh, sembra piuttosto terribile.
Qualcuno è riuscito a far funzionare perfettamente l'autorotazione mentre la tastiera è stata installata? Sembra un'esplosione di caos che Apple ha completamente trascurato. >: |
Quale versione iOS stai provando? – Till
5.1, 5.0 e 4.3.2 – Voobr