У меня есть UIViewController, который возвращает YES
в shouldAutorotateToInterfaceOrientation:
для UIDeviceOrientationPortrait
и NO
для всего остального. С этим видом на вершине стека я использую pushViewController:animated:
, чтобы выдвинуть новый UIViewController
. Новый контроллер возвращает YES
для всего в shouldAutorotateToInterfaceOrientation:
.
Первый вид отказывается вращаться (как и ожидалось). После того, как второй вид нажат, пользователь может повернуть устройство и пользовательский интерфейс будет вращаться (также, как и ожидалось). Если второй вид находится в альбомной ориентации, а пользователь нажимает кнопку возврата (которая вызывает popViewControllerAnimated:
), первый вид будет отображаться повернутым ( неожиданный! ).
Если пользователь поворачивает устройство обратно в портретную ориентацию, вид будет вращаться, а затем застревать в портретном режиме, как и раньше. Это работает, но уродливо для пользователя, пока они не повернут назад. Поэтому я нахожусь в поиске способа заставить этот вид оставаться в портретном режиме.
Единственный найденный мной обходной путь - это использование -[UIDevice setOrientation:]
, которое выдает предупреждение (orientation
только для чтения), но работает, поскольку оно действительно определено. Это огромный взлом, и я хотел бы реального решения. В поисках реального решения я подключил GDB к приложению Photos (MobileSlideshow.app) и обнаружил, что оно тоже использует -[UIDevice setOrientation:]
. Будучи внутренним приложением, я думаю, что у них разные правила.
Есть ли правильный способ достижения ожидаемого поведения авторотации?