Раскадровка iPhone: другая сцена для портрета и пейзажа - PullRequest
26 голосов
/ 08 января 2012

Если немного прокрутить страницу Apple Developer , вы найдете раздел «Создание альтернативного интерфейса ландшафта». Основной подход, описанный там, состоит в том, чтобы представить другой NIB-файл в виде модального вида при изменении ориентации. Я использую функцию раскадровки, поэтому у меня нет NIB. Как мне загрузить другую «сцену» в этом случае?

Кроме того, я использую контроллер панели вкладок, я не хочу показывать модальное представление. Я просто хочу заменить текущий портретный режим альбомным, разработанным с помощью конструктора интерфейсов, и сохранить панель вкладок. Каким будет способ раскадровки для решения задачи «Создание альтернативного интерфейса ландшафта»? Спасибо.

Ответы [ 3 ]

20 голосов
/ 14 января 2012

Когда вы добавляете контроллер представления в раскадровку, он поставляется с представлением. Назовите это контейнером. Добавьте два вида в контейнерный вид: портретный и альбомный. Установите размер книжного и альбомного видов соответственно с помощью инспектора размера. Добавьте кнопки, дополнительные виды, метки или что-либо еще в портретную и альбомную ориентацию, как требуется для вашего приложения. Затем при изменении ориентации скрыть один вид и показать другой.

3 голосов
/ 10 июня 2012

Вы можете настроить навигационный контроллер и один основной вид. Затем вы можете использовать вид шаблона для макетов портрета и ландшафта (2 дополнительных вида).

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

При этом вы используете гибридный подход в отношении написания некоторого кода пользовательского интерфейса и использования Interface Builder. После установки двух шаблонов создайте уникальный идентификатор для каждого. Вам придется написать некоторую логику для обработки представления и его подпредставлений. Рекурсивный метод для возврата их коллекции на основе выбранного вами шаблона.

Основная логика в реализации контроллера корневого представления должна будет проверить isPortrait, и на основании этого вы захотите загрузить правильное представление на основе идентификатора.

Поэкспериментируйте с этой концепцией и посмотрите, работает ли она для вас. Основным преимуществом отказа от использования двух отдельных представлений с уникальными элементами управления (а не с общим подходом с одинаковыми тегами) является то, что вы сохраняете доступ к своим исходным подпредставлениям. Любые переменные экземпляра, которые вы определяете в контроллере представления, которые указывают на текстовое поле, метку и т. Д., Продолжают это делать независимо от того, какой вид шаблона используется. Это поддерживает модель, представление, подход контроллера, поскольку структура данных остается неизменной.

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

Надеюсь, это поможет некоторым.

1 голос
/ 26 июля 2014

Вы можете создать xib-файл, содержащий 2 просмотра, один передний портрет и один для альбомной ориентации.Назначьте в качестве владельца файла XIB тот же видовой контроллер представления, что и у вас в раскадровке.В viewDidLoad загрузите файл xib и добавьте подходящее представление для портретной или альбомной ориентации.

Таким образом, если у вас есть раскадровка со многими контроллерами представления, вы можете установить две возможности (книжная или альбомная ориентация) только в контроллерах представления, которыеВы заинтересованы в изменении ориентации.

Я использовал это решение и работаю очень хорошо!

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