iOS 6: Как мне ограничить некоторые виды портретом и позволить другим вращаться?
У меня есть приложение для iPhone, которое используетUINavigationController
представить интерфейс детализации: сначала один вид, затем другой, до четырех уровней в глубину. Я хочу, чтобы первые три вида были ограничены книжной ориентацией, и только последний вид должен быть повернут в альбомную ориентацию. При возврате из четвертого вида в третий и четвертый вид был в альбомной ориентации, я хочу, чтобы все повернулось назад в портрет.
В iOS 5 я просто определилсяshouldAutorotateToInterfaceOrientation:
в каждом из моих контроллеров представления вернуть YES для допустимых ориентаций. Все работало, как описано выше, включая возврат в портретный режим, даже если устройство удерживалось в горизонтальной ориентации при возврате из контроллера вида № 4 в № 3.
В iOS 6 все контроллеры представления поворачиваются в горизонтальную плоскость, ломая те, которые не были предназначены. Примечания к выпуску iOS 6 говорят
More responsibility is moving to the app and the app delegate. Now, iOS containers (such as UINavigationController
) do not consult their children to determine whether they should autorotate. [...] The system asks the top-most full-screen view controller (typically the root view controller) for its supported interface orientations whenever the device rotates or whenever a view controller is presented with the full-screen modal presentation style. Moreover, the supported orientations are retrieved only if this view controller returns YES from its shouldAutorotate
method. [...] The system determines whether an orientation is supported by intersecting the value returned by the app’s supportedInterfaceOrientationsForWindow:
method with the value returned by the supportedInterfaceOrientations
method of the top-most full-screen controller.
Так что я подклассUINavigationController
дал мойMainNavigationController
булево свойствоlandscapeOK
и использовал это, чтобы вернуть допустимые ориентации вsupportedInterfaceOrientations
, Тогда в каждом из моих контроллеров представления & apos;viewWillAppear:
методы у меня есть такая строка
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
сказать моемуMainNavigationController
желаемое поведение.
Here comes the question: Если я сейчас перейду к своему четвертому виду в портретном режиме и переверну телефон, он поворачивается в альбомную ориентацию. Теперь я нажимаю кнопку «Назад», чтобы вернуться к третьему виду, который должен работать только в портретном режиме. Но он не вращается назад. Как мне это сделать?
Я старался
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
вviewWillAppear
метод моего третьего контроллера представления, но он ничего не делает. Это неправильный метод для вызова или, может быть, это неправильное место для вызова или я должен реализовать все это совершенно по-другому?