Как заставить ориентацию экрана в определенных контроллерах представления? - PullRequest
16 голосов
/ 24 ноября 2008

Мое приложение довольно простое: оно запускается с контроллером представления, который содержит табличное представление (в макете сгруппированного представления) с несколькими опциями. Когда пользователь нажимает на одну из опций, я помещаю другой контроллер представления в свой контроллер навигации.

Этот второй контроллер вида просто отображает UIImageView, и пользователь может изменять ориентацию экрана на этом контроллере вида между портретным / альбомным режимами. Это прекрасно работает, и все счастливы.

Однако, если пользователь нажимает кнопку «Назад» на моей навигационной панели в ландшафтном режиме, макет первого контроллера все испортил. Смотрите скриншоты ниже / до:

before
(источник: pessoal.org )
after
(источник: pessoal.org )

Есть какие-нибудь подсказки о том, как заставить первый контроллер представления (второй снимок экрана в этом посте) оставаться в ориентации портретного экрана?

Ответы [ 4 ]

2 голосов
/ 25 ноября 2008

Кажется, что нет способа сделать это, используя документированные методы.

Я подал ошибку для этого: rdar: // 6399924

«Нет способа всегда ограничивать UIViewController одной ориентацией»

Вы можете увидеть его на открытом радаре (вместе со ссылкой на пример кода, чтобы воспроизвести проблему) здесь: http://openradar.appspot.com/radar?id=697

0 голосов
/ 12 сентября 2010

Для этого есть решение: использовать контроллер представления и добавить его представление в окно. затем в этом контроллере вы заставляете ландшафт в методе beforeAutorotate .... Он работает нормально, но убедитесь, что это необходимо для вашего проекта, потому что не очень разумно заставлять пользователя поворачивать свой iPhone. Кстати, вот пример кода, если он вам нужен.

http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html

0 голосов
/ 11 января 2009

Как предложил кто-то из открытых радаров, обходной путь - отключить кнопку «назад» в не-портрете:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    // don't let user press "back" button in landscape - otherwise previous view and the rest of the application
    // will also be in landscape which we did not feel like testing yet
    self.navigationController.navigationBarHidden = (UIInterfaceOrientationPortrait != self.interfaceOrientation);
}
0 голосов
/ 25 ноября 2008

Я не смог заставить это работать так, как я хотел. Вы должны иметь возможность установить определенную ориентацию для ViewController, но NavigationController, похоже, не всегда делает правильные вещи.

Я реконструктировал мои экраны так, чтобы они работали в любой ориентации. Это может быть дополнительной работой, но в любом случае она кажется более естественной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...