Как получить высоту клавиатуры БЕЗ использования уведомлений

Я знаю, как настроить наблюдателя NSNotification для обнаружения, когда клавиатура показывает/скрывает. Из этого я могу получить высоту клавиатуры. Но что произойдет, если устройство повернуто, пока клавиатура все еще отображается?

Есть ли способ получить высоту клавиатуры в этом новом состоянии? Поскольку клавиатура по-прежнему отображается, новое уведомление не будет запущено.

Ответы

Ответ 1

Вам все равно придется использовать NSNotificationCenter, но вы должны соблюдать другой ключ. Ключ, который вы ищете, - это UIKeyboardDidChangeFrameNotification, который согласно документам отправляется сразу после изменения рамки клавиатуры.

Ответ 2

В iOS 6 +, если вы зарегистрировались для приема UIKeyboardDidShowNotification, ваш селектор будет вызываться снова, когда меняется ориентация.

Это уведомление, которое Apple использует в своем примере кода для "Управление клавиатурой" , однако при использовании этого уведомления их вычисления ошибочны, если вычисление высоты клавиатуры в ландшафтном режиме:

CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

Замените выше:

// Works in both portrait and landscape mode
CGRect kbRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
kbRect = [self.view convertRect:kbRect toView:nil];

CGSize kbSize = kbRect.size;