2012-07-13 8 views
6

Hice una vista de teclado personalizada y la vinculé a la propiedad inputView de un UITextField. ¿Hay alguna manera de cambiar la altura de un inputView personalizado cuando la orientación cambia y el cambio de marco se anima suavemente como el teclado del sistema? El tamaño de mi teclado es 768x272 y cuando el dispositivo se vuelve horizontal, el tamaño se vuelve 1024x272, pero quiero agrandarlo como 1024x372. Si cambio el marco con el siguiente código cuando obtengo UIDeviceOrientationDidChangeNotification, la animación de cambio no es uniforme.Cambiar la altura de una entrada personalizada cuando el dispositivo gira

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

¿Has intentado ponerlo en el bloque de animación? – Zaraki

+0

Intenté ponerlo como un bloque de animación en willRotateToInterfaceOrientation: (UIInterfaceOrientation) toInterfaceOrientation duration: (NSTimeInterval) duration Pero el resultado es el mismo, la altura cambia instantáneamente de pequeña a alta, luego la animación comienza a hacerse corta para amplio. – user1477781

Respuesta

2

Después de muchos experimentos, encontré la mejor respuesta a mi propia pregunta. Una respuesta corta es cambiar de marco cuando obtiene UIKeyboardDidHideNotification.

Custom inputView está incrustado en otra vista controlada por el sistema llamado UIPeripheralHostView. Así que cambiar la entrada de entrada personalizada en el momento incorrecto no se refleja inmediatamente o muestra un diseño feo en el mejor de los casos.

Cuando el dispositivo gira, el sistema oculta brevemente el teclado y luego realiza una animación de rotación del teclado desde la orientación anterior a la nueva orientación. Creo que el bloque de animación se inserta en algún lugar entre dos notificaciones UIKeyboardDidHideNotification y UIKeyboardWillShowNotification. Estas notificaciones se combinan con UIKeyboardWillChangeFrameNotification. El "marco" en esta notificación significa realmente el marco de UIPeripheralHostView.

Cambiando el marco de mi vista de entrada cuando obtengo UIKeyboardDidHideNotification le da al sistema la oportunidad de ajustar el marco de UIPeripheralHostView antes de que comience la animación, lo que produce una transición suave desde el teclado corto al alto durante el cambio de orientación.

Esto funciona en iOS 5. Pero Apple puede cambiar la práctica en el futuro.

+0

En iOS 6, no recibirá las notificaciones de UIKeyboardWillShowNotification, etc. si tiene una entrada personalizada – theraven

6

por Apple documentation para UIResponder.inputView: "Si se encuentra con una vista UIKit entrada con un valor UIViewAutoresizingFlexibleHeight en su máscara de tamaño automático, cambia la altura para que coincida con el teclado."

Por lo tanto, si desea una altura personalizada, no debe especificar la máscara UIVieAutoresizingFlexibleHeight.

Cuestiones relacionadas