2010-04-30 11 views

Respuesta

18

Para iPhone en retrato 216 píxeles, paisaje 162 píxeles, para iPad en vertical es de 264 píxeles y en paisaje de 352 píxeles. Esto es válido para el teclado de los EE. UU. En 2010.

Estos tamaños pueden ser diferentes para otros idiomas y también pueden cambiar para los EE. UU.

+0

usa 116 para iPhone en el paisaje. 162 todavía era grande. – tallen11

+9

No debe confiar en estas medidas. Los diferentes idiomas usan diferentes tamaños de teclado. Incluso el tamaño del teclado en inglés de EE. UU. Puede cambiar en futuras versiones de iOS. Siempre debe consultar el tamaño del teclado mediante programación: vea la respuesta de @ Infinity para saber cómo. – titaniumdecoy

+3

-1 ¿De verdad necesito explicar por qué? –

60

Toda la respuesta en el código se ve así. En primer lugar es necesario registrarse para las notificaciones:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; 

y hay más here. Tenga en cuenta que también deberá deshacerse de ellos (use removeObserver).

Luego necesita un método que reciba la notificación para obtener el tamaño. Tenga en cuenta que el tamaño, al principio, no se gira (ya que el UIWindow no gira. Su contenido sí lo hace).

- (void) keyboardDidShow:(NSNotification*)notification { 
     CGRect keyboardFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 
     NSLog(@"keyboard frame raw %@", NSStringFromCGRect(keyboardFrame)); 

     UIWindow *window = [[[UIApplication sharedApplication] windows]objectAtIndex:0]; 
     UIView *mainSubviewOfWindow = window.rootViewController.view; 
     CGRect keyboardFrameConverted = [mainSubviewOfWindow convertRect:keyboardFrame fromView:window]; 
     NSLog(@"keyboard frame converted %@", NSStringFromCGRect(keyboardFrameConverted)); 
} 

Obviamente, si usted tiene una referencia a su mainSubviewOfWindow por algún otro medio, lo utilizan.

+0

Sí, gracias por el código, fui perezoso al escribirlo ... :) –

+0

Claro @Infinity, me complace ayudar. –

+2

wow, gracias @Yar! Esto era justo lo que necesitaba y me ahorró un montón de dolor. – ragamufin

11

Tenga en cuenta que si el usuario decide utilizar el teclado "dividido" en el iPad, entonces no se disparará UIKeyboardDidShowNotification/* UIKeyboardDidHideNotification notificaciones *. En su lugar, UIKeyboardDidChangeFrameNotification se activará la notificación en show y hide. Deberá analizar keyboardFrame.origin.y para averiguar qué ocurre exactamente (mostrar u ocultar).

+0

desde iOS 5. ¡Gracias! :) –

Cuestiones relacionadas