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

У меня есть контроллер представления, прослушивающий как 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!

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

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

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

23
задан Voobr 17 March 2012 в 01:16
поделиться