Как лучше всего справиться с различиями в ландшафте/портрете в IB?

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

Мой вопрос: есть ли способ в Interface Builder для одного представления поддерживать несколько видов (один для альбомной ориентации, другой для портретной ориентации)? Если нет, как другие люди делают это с IB? Вы настроили 2 представления?

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


person rustyshelf    schedule 09.10.2008    source источник


Ответы (4)


При необходимости я добавляю UIView объектов в представление в IB, которые делаю скрытыми. Дайте ему приятный цвет фона, чтобы вы могли его видеть, и отправьте его полностью на задний план. Затем используйте рамку этого представления, когда вам нужно установить рамку объекта. Если у вас их много, вы можете вместо этого использовать UILabel, чтобы вы могли дать ему видимое имя в IB.

Если вас беспокоят проблемы с памятью, просто удалите все эти лишние UIView в ViewDidLoad и просто сохраните значения их кадров в элементе CGRect. Это работает, конечно, только в том случае, если у вас нет автоматического изменения размера или положения представления при повороте, чего, вероятно, в любом случае не следует делать в этом случае. Я делаю это для изменения размера/перемещения по любой причине, а не только при повороте экрана.

person Ed Marty    schedule 30.12.2008

Я не уверен на 100%, возможно ли это, но рассматривали ли вы возможность использования разных контроллеров представления для альбомной и портретной ориентации?

person Colin Barrett    schedule 27.10.2008
comment
@Colin: Как это будет работать? При повороте мне пришлось бы отбросить один и добавить другой, что, я думаю, будет делать странные вещи с обновлением экрана... это также будет означать, что мне придется настроить какой-то общий родительский класс и попытаться заставить их совместно использовать код ... может стать очень грязным - person rustyshelf; 30.10.2008

Атрибуты AutoSize объектов IBOutlet в Инспекторе размеров IB (команда 3) предоставляют несколько довольно хороших опций для автоматического растяжения и позиционирования элементов. Вы можете управлять положением экрана L/R и T/B, а также относительной шириной и высотой. Вы не можете получить полный контроль над макетом, но большинство основных операций есть.

person Arrel    schedule 25.06.2009

Единственный способ, которым один вид может поддерживать несколько ориентаций в IB, — это установить маску автоматического изменения размера компонентов либо на масштабирование, либо на привязку к краям. Чтобы разработать совершенно другой макет для каждой ориентации, вам нужно разработать портретный и альбомный вид отдельно (каждый в своем собственном XIB) и программно переключаться между ними.

person Martin    schedule 01.06.2011