Я хочу добавить аксессуарView на клавиатуре, вызванной из UISearchBar. Поскольку UISearchBar не реализует это свойство, я только что создал toolBar. Следуя Apple's documentation по этому вопросу, я решил использовать центр уведомлений не только для того, чтобы знать, когда вызывается клавиатура, но и знать размер клавиатуры, который изменяется в зависимости от ориентации.размер клавиатуры от NSNotificationCenter
Я следовал примеру документации и в методе 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 является 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, точно чтобы избежать зависимости от высоты клавиатуры (как float), и мне все равно пришлось добавить условное условное выражение.
Любые идеи о том, что здесь происходит?
CGRect хранится под ключ UIKeyboardFrameBeginUserInfoKey в система координат окна (которая всегда находится в невращающейся ориентации) –
Благодарим вас за ответ и пояснение. Все вместе - это немного боль в шее. – Marcal
Кажется, это не работает для меня на 64-битных устройствах. – korbonix