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