Клавиатура «WillShow» и «WillHide» против вращения

У меня есть контроллер представления, который прослушивает UIKeyboardWillShowNotification и UIKeyboardWillHideNotification. Обработчики для этих уведомлений настраивают различные части представления, что является стандартной процедурой.

Следующий код используется для преобразования прямоугольника клавиатуры из экранных координат:

CGRect keyboardBounds = [self.view convertRect:[keyboardBoundsValue CGRectValue] fromView:nil];

Опять стандартная процедура. К сожалению, существует критическая ситуация, когда это преобразование не удается. Посмотрите, что происходит, когда iPhone поворачивается из портретной в альбомную, когда клавиатура развернута:

1) iOS автоматически срабатываетUIKeyboardWillHideNotification; self.interfaceOrientation сообщается какпортрет; клавиатура216,0. Это имеет смысл, Почему? Потому что обработчику уведомлений предоставляется возможность «очистить», прежде чем представление переключается в ландшафтный режим.

2) iOS автоматически срабатываетUIKeyboardWillShowNotification; self.interfaceOrientation сообщается какпортрет; клавиатура480,0. Это не имеет значения, Почему нет? Поскольку обработчик уведомлений выполнит свою работу, думая, что высота клавиатуры составляет 480.0!

Apple бросил мяч на этом, или я делаю что-то не так?

Обратите внимание, что прослушивание вместо UIKeyboardСделалShowNotification не является допустимым решением, поскольку оно значительно ухудшает пользовательский опыт. Почему? Потому что анимация моих изменений в представлении после анимации развертывания клавиатуры ... ну, выглядит довольно ужасно.

Кому-нибудь удавалось добиться, чтобы авторотация работала идеально, пока клавиатура развернута? Похоже, взрыв хаоса, который Apple полностью упустил из виду. >: |

Ответы на вопрос(7)

Ваш ответ на вопрос