Quiero agregar un accesorioView en un teclado llamado desde un UISearchBar. Como UISearchBar no implementa esta propiedad, acabo de crear una barra de herramientas. Después de Apple's documentation al respecto, decidí usar el centro de notificaciones no solo para saber cuándo se llama el teclado sino también para conocer el tamaño del teclado, que cambia según la orientación.tamaño del teclado dado por NSNotificationCenter
He seguido el ejemplo en la documentación y, en el método keyboardWasShown
, llamo a una animación que mostrará la barra de herramientas en la parte superior del teclado. Algo como esto:
-(void)keyboardWasShown:(NSNotification*)aNotification {
NSDictionary *info=[aNotification userInfo];
CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"width: %.1f; heigth: %.1f", keyboardSize.width, keyboardSize.height);
[self showAccessoryView:keyboardSize.height];
}
y, en la animación que establece el marco de la barra de herramientas de la siguiente manera:
self.auxiliaryKeyboardBar.frame=CGRectMake(0, self.view.frame.size.height-(44+kbh), self.view.frame.size.width, 44);
, donde 44 es la heigth estática de la barra de herramientas y la kbh es la keyboard.size .heigth pasó del método de arriba.
El problema que estoy observando es que el tamaño del teclado proporcionado por el diccionario userInfo
siempre se refiere a la orientación vertical. Por lo tanto, la NSLog en orientación vertical es:
width: 320.0; heigth: 216.0
, que está bien
pero cuando cambio la orientación a horizontal y que llamo el teclado, el NSLog es el siguiente:
width: 162.0; heigth: 480.0
, lo que pone la barra de herramientas fuera de alcance.
modo, terminé la adición de un condicional antes de llamar a la animación, como este:
if ([self deviceIsPortrait]==YES) {
[self showAccessoryView:keyboardSize.height];
}else if ([self deviceIsPortrait]==NO) {
[self showAccessoryView:keyboardSize.width];
}
Ahora estoy preguntando si estoy o no estoy haciendo algo mal, porque yo estoy siguiendo ejemplo de Apple precisamente para evitar la dependencia de la altura del teclado (como un flotador) y terminé teniendo que agregar una orientación condicional de todos modos.
¿Alguna idea de lo que está pasando aquí?
El CGRect almacenado en la clave UIKeyboardFrameBeginUserInfoKey es en el sistema de coordenadas de la ventana (que siempre está en la orientación no girada) –
Gracias a ambos por la respuesta y la aclaración. Todos juntos son un poco dolorosos. – Marcal
Esto parece no funcionar para mí en dispositivos de 64 bits. – korbonix