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