размер клавиатуры, заданный NSNotificationCenter

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

Что тут происходит?

7
задан Cœur 25 March 2019 в 16:42
поделиться