размер клавиатуры предоставлен 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, чтобы точно избежать зависимости от высоты клавиатуры (как поплавка), и мне все равно пришлось добавить условную ориентацию.
Есть идеи о том, что здесь происходит?