25

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

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

ответ

19

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

+1

интересный подход. Попробуй это. Спасибо – Korbi

+5

Что делать, если вы используете IBOutlets, они могут быть назначены только одному виду. – Paranaix

+1

@Paranaix Я не совсем понимаю ваш комментарий. Первоначальный вопрос представляет собой требование наличия разных интерфейсов для ландшафтного и портретного режима. Если вы ищете другой макет для одного и того же интерфейса, это другая проблема. Может быть, вы должны задать совершенно новый вопрос. –

2

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

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

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

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

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

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

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

0

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

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

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

Смежные вопросы