Как получить высоту клавиатуры БЕЗ использования уведомлений
Я знаю, как настроить наблюдателя 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;