Я хочу добавить accessView на клавиатуру, вызываемую из UISearchBar. Поскольку UISearchBar не реализует это свойство, я только что создал панель инструментов. Следуя документации Apple по этому вопросу , я решил использовать центр уведомлений не только для того, чтобы знать, когда вызывается клавиатура, но и для того, чтобы знать размер клавиатуры, который меняется в зависимости от ориентации.
Я следовал примеру из документации и в методе keyboardWasShown
вызываю анимацию, которая показывает панель инструментов поверх клавиатуры. Что-то вроде этого:
-(void)keyboardWasShown:(NSNotification*)aNotification {
NSDictionary *info=[aNotification userInfo];
CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"width: %.1f; height: %.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 — это значение keyboard.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 именно для того, чтобы избежать зависимости от высоты клавиатуры (как с плавающей запятой), и мне все равно пришлось добавить условную ориентацию.
Что тут происходит?