Tamaño del teclado dado por NSNotificationCenter

Quiero agregar un accesorioView en un teclado llamado desde una barra UISearch. Dado que UISearchBar no implementa esta propiedad, acabo de crear una barra de herramientas. SiguiendoLa documentación de apple Al respecto, he decidido utilizar el centro de notificaciones no solo para saber cuándo se llama el teclado, sino también para saber el tamaño del teclado, que cambia según la orientación.

He seguido el ejemplo en la documentación y, en elkeyboardWasShown Método, llamo 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, establezco el marco de la barra de herramientas de esta manera:

 self.auxiliaryKeyboardBar.frame=CGRectMake(0, self.view.frame.size.height-(44+kbh), self.view.frame.size.width, 44);

donde 44 es la altura estática de la barra de herramientas y kbh es el tamaño de keyboard.size.heigth pasado del método anterior.

El problema que estoy observando es que el tamaño del teclado dado por eluserInfo Diccionario siempre se refiere a la orientación vertical. Por lo tanto, el NSLog en orientación vertical es:

width: 320.0; heigth: 216.0que esta bien

pero cuando cambio la orientación a horizontal y llamo al teclado, el NSLog es el siguiente:

width: 162.0; heigth: 480.0, lo que pone a la barra de herramientas fuera de alcance.

Entonces, terminé agregando un condicional antes de llamar a la animación, como esto:

if ([self deviceIsPortrait]==YES) {
        [self showAccessoryView:keyboardSize.height];
    }else if ([self deviceIsPortrait]==NO) {
        [self showAccessoryView:keyboardSize.width];
    }

Ahora me pregunto si estoy haciendo algo mal o no, porque sigo el ejemplo de Apple precisamente para evitar la dependencia en la altura del teclado (como flotador) y de todos modos tuve que agregar una orientación condicional.

¿Alguna idea sobre lo que está pasando aquí?

Respuestas a la pregunta(1)

Su respuesta a la pregunta