Следующий код дает вам рамку клавиатуры для всех ориентаций, независимо от того, используете ли вы полноэкранный вид или подробный вид разделенного вида.
NSDictionary* info = [aNotification userInfo];
CGRect frame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGRect keyboardEndFrame = [self.view convertRect:frame fromView:nil]; // The raw frame values are physical device coordinate.
CGSize keyboardSize = keyboardEndFrame.size;
Рамка клавиатуры, доставляемая уведомлением, всегда представлена в виде аппаратных координат с началом координат в верхнем правом углу экрана, когда устройство iOS работает в обычном портретном режиме с кнопкой «Домой» внизу. Метод -convertRect: fromView изменяет координаты от координат окна (= аппаратные средства) до локальных координат вида.
Я обнаружил, что с клавиатурой Bluetooth вы получаете одно уведомление UIKeyboardDidShowNotification при первом повороте экрана, но ни одного после этого. Сложнее отличить закрепленную клавиатуру от отсоединенной / разделенной клавиатуры и клавиатуры BT.