У меня есть контроллер представления, который прослушивает UIKeyboardWillShowNotification и UIKeyboardWillHideNotification. Обработчики для этих уведомлений настраивают различные части представления, что является стандартной процедурой.
Следующий код используется для преобразования прямоугольника клавиатуры из экранных координат:
CGRect keyboardBounds = [self.view convertRect:[keyboardBoundsValue CGRectValue] fromView:nil];
Опять стандартная процедура. К сожалению, существует критическая ситуация, когда это преобразование не удается. Посмотрите, что происходит, когда iPhone поворачивается из портретной в альбомную, когда клавиатура развернута:
1) iOS автоматически запускает UIKeyboardWillHideNotification ; self.interfaceOrientation сообщается как портрет ; клавиатурыBound.height составляет 216,0 . Это имеет смысл . Зачем? Поскольку обработчику уведомлений предоставляется возможность «очистить», прежде чем представление переключится в альбомный режим.
2) iOS автоматически запускает UIKeyboardWillShowNotification ; self.interfaceOrientation сообщается как портрет ; клавиатура Bounds.height составляет 480,0 . Это НЕ имеет смысла . Почему бы и нет? Поскольку обработчик уведомлений выполнит свою работу, думая, что высота клавиатуры составляет 480.0!
Apple бросила мяч на этот раз, или я что-то не так делаю?
Обратите внимание, что прослушивание вместо UIKeyboard Did ShowNotification не является допустимым решением, поскольку оно значительно ухудшает восприятие пользователем. Зачем? Потому что анимация моих изменений в представлении после анимации развертывания клавиатуры ... ну, выглядит довольно ужасно.
Кому-нибудь удалось добиться, чтобы авторотация работала идеально, пока клавиатура развернута? Похоже, взрыв хаоса, который Apple полностью упустил из виду. >: |