Подтвердить что ты не робот

Как заставить ориентацию экрана в определенных контроллерах вида?

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

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

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

перед http://pessoal.org/shot1.jpg  после http://pessoal.org/shot2.jpg

Любые подсказки о том, как заставить первый контроллер представления (второй снимок экрана в этом сообщении) оставаться в ориентации на портретном экране?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Как и кто-то из предложенного открытого радара, обходным путем является отключение кнопки "назад", а не в режиме "портрет":

- (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);
}

Ответ 3

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

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

Ответ 4

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

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