2012-07-13 21 views
6

Ho creato una vista personalizzata della tastiera e l'ho collegata alla proprietà inputView di un UITextField. C'è un modo per modificare l'altezza di un inputView personalizzato quando l'orientamento cambia e il fotogramma cambia automaticamente come nella tastiera di sistema? La mia dimensione della tastiera è 768x272 e quando il dispositivo va in orizzontale la dimensione diventa 1024x272, ma voglio ingrandirla come 1024x372. Se cambio il frame con il codice sotto quando ottengo UIDeviceOrientationDidChangeNotification, l'animazione di modifica non è liscia.Modifica altezza di un input personalizzato Quando il dispositivo ruota

textField.inputView.frame = CGRectMake(0,0,1024,372); 
+0

hai provato a metterlo sotto il blocco di animazione ?? – Zaraki

+0

Ho provato a inserirlo come blocco di animazione in willRotateToInterfaceOrientation: (UIInterfaceOrientation) inInterfaceOrientation duration: (NSTimeInterval) durata Ma il risultato è lo stesso, l'altezza cambia istantaneamente da piccola ad alta, quindi l'animazione inizia a renderla breve largo. – user1477781

risposta

2

Dopo molti esperimenti, ho trovato la risposta migliore alla mia domanda. Una risposta breve è cambiare cornice quando ottieni UIKeyboardDidHideNotification.

Input personalizzatoView è incorporato in un'altra vista controllata dal sistema denominato UIPeripheralHostView. Pertanto, la modifica dell'ingresso personalizzato in un momento sbagliato non si riflette immediatamente o mostra un brutto layout nel migliore dei casi.

Quando il dispositivo ruota, il sistema nasconde brevemente la tastiera, quindi esegue un'animazione di rotazione della tastiera dal vecchio orientamento al nuovo orientamento. Penso che il blocco di animazione sia inserito tra due notifiche UIKeyboardDidHideNotification e UIKeyboardWillShowNotification. Queste notifiche sono accoppiate con UIKeyboardWillChangeFrameNotification. Il "frame" in questa notifica significa in realtà il frame di UIPeripheralHostView.

Quindi cambiare la cornice del mio punto di vista di ingresso quando ricevo UIKeyboardDidHideNotification dà al sistema la possibilità di regolare il telaio della UIPeripheralHostView prima dell'inizio di animazione, con conseguente passaggio graduale da corto tastiera per tastiera di altezza durante il cambio di orientamento.

Questo funziona in iOS 5. Ma Apple potrebbe cambiare la pratica in futuro.

+0

In iOS 6 non si riceveranno notifiche UIKeyboardWillShowNotification ecc quando si dispone di un input personalizzato – theraven

6

Per Apple documentation per UIResponder.inputView: "Se UIKit incontra una vista in ingresso con un valore UIViewAutoresizingFlexibleHeight nella sua maschera ridimensionamento automatico, esso cambia l'altezza per abbinare la tastiera".

Quindi, se si desidera altezza personalizzata, non specificare la maschera UIVieAutoresizingFlexibleHeight.

Problemi correlati