размер клавиатуры предоставлен NSNotificationCenter

Я хочу добавить accessoryView на клавиатуре, вызываемой из UISearchBar. Поскольку UISearchBar не реализует это свойство, я только что создал панель инструментов. СледующийДокументация Apple В связи с этим я решил использовать центр уведомлений не только для того, чтобы знать, когда вызывается клавиатура, но также и для того, чтобы знать размер клавиатуры, который изменяется в зависимости от ориентации.

Я следовал примеру в документации и наkeyboardWasShown метод, я вызываю анимацию, которая покажет панель инструментов на верхней части клавиатуры. Что-то вроде этого:

-(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];


}

и на анимации я установил кадр панели инструментов следующим образом:

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

где 44 - статическая высота панели инструментов, а kbh - значение клавиатуры.size.heigth, переданное вышеописанным способом.

Проблема, которую я наблюдаю, состоит в том, что размер клавиатуры, заданныйuserInfo Словарь всегда относится к портретной ориентации. Итак, NSLog по портретной ориентации это:

width: 320.0; heigth: 216.0это нормально

но когда я меняю ориентацию на альбомную и вызываю клавиатуру, NSLog выглядит следующим образом:

width: 162.0; heigth: 480.0, который выводит панель инструментов из области видимости.

Итак, я добавил условие перед вызовом анимации, например:

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

Теперь я задаюсь вопросом, делаю ли я что-то неправильно или нет, потому что я следую примеру Apple, чтобы точно избежать зависимости от высоты клавиатуры (как поплавка), и мне все равно пришлось добавить условную ориентацию.

Есть идеи о том, что здесь происходит?

Ответы на вопрос(1)

Ваш ответ на вопрос