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