Да, я немного поиграл и понял это. Спасибо кстати :)

вопрос касается поворота устройства iOS и нескольких управляемых представлений в UINavigationController. Некоторые взгляды должны бытьограничен в портрет ориентация, а некоторые должнысвободно вращаться, Если вы попытаетесь создать простейшую установку с тремя представлениями, вы заметите, что в поведении автоповорота есть несколько очень неприятных особенностей. Сценарий, однако, очень прост, поэтому я думаю, что я либо неправильно делаю реализацию авторотации, либо я что-то забываю.

У меня есть очень простое демонстрационное приложение, которое показывает странности, и я сделал видео, показывающее его в действии.

Скачать приложение (проект XCode)Рассмотрите классы как суть (довольно долго)Смотрите видео с вопросом (YouTube, 2m43s)

Настройка очень проста: три вида контроллеров называютсяFirstViewController, SecondViewController а такжеThirdViewController все расширяютAbstractViewController показывает метку с именем класса и возвращает YES дляshouldAutorotateToInterfaceOrientation: когда устройство находится в портретной ориентации. SecondViewController переопределяет метод this, чтобы обеспечить все повороты. Все три конкретных класса добавляют несколько цветных квадратов, чтобы иметь возможность перемещаться между представлениями, нажимая и вставляя контроллеры в / изUINavigationController, Пока что очень простой сценарий, я бы сказал.

Если вы держите устройство в портретной или альбомной ориентации, это результат, которого я не только хотел бы достичь, но и ожидал. На первом изображении вы видите, что все виды «в вертикальном положении», а на втором вы видите, что только второй контроллер вида вращает ориентацию устройства. Чтобы было ясно, должна быть возможность перейти от второго вида в альбомном режиме к третьему, но поскольку этот третий поддерживает только книжную ориентацию, он должен отображаться только в книжной ориентации. Самый простой способ убедиться, что результаты в порядке, это посмотреть на положение несущей стойки.

Но этот вопрос здесь, потому что фактический результат совершенно другой. В зависимости от того, какой вид вы видите, когда вы поворачиваете устройство, и в зависимости от того, какой вид вы переходите к следующему, виды не будут вращаться (если быть точным,didOrientFromInterfaceOrientation: метод никогда не вызывается). Если вы находитесь в альбомной ориентации на втором и перейдете к третьему, он будет иметь ту же ориентацию, что и второй (= плохо). Если вы перейдете от второго к первому, однако, экран перейдет в «принудительный» портретный режим, и полоса несущей будет находиться на физической верхней части устройства, независимо от того, как вы его держите. Видео показывает это более подробно.

Мой вопрос двоякий:

Почему первый контроллер вида поворачивается назад, а не третий?Что нужно сделать, чтобы получить правильное поведение от ваших представлений, когда вы хотите, чтобы одни представления выполнялись автоматически, а другие - нет?

Приветствия, EP.

РЕДАКТИРОВАТЬ: В крайнем случае, прежде чем назначить награду, я полностью переписал этот вопрос, чтобы быть короче, яснее и, надеюсь, более привлекательным, чтобы дать ответ.

Ответы на вопрос(5)

Ваш ответ на вопрос