2014-10-06 2 views
20

Как добавить автоматические ограничения компоновки программно, чтобы центрировать вид в оставшемся пространстве (см. Пример на рисунке ниже)?Автоматическая компоновка макета в оставшемся пространстве (программно)

enter image description here

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

ответ

47

Для этого вам необходимо включить spacer view.

Давайте начнем с некоторыми просмотрами:

some views

Я создал розовый вид занять верхние 70% зрение корня. Сначала я придавить его всем четырем края зрения корня:

pink constraints

Тогда я буду править нижнее ограничением двух способов. Во-первых, я уверен, что первый элемент - розовый, а второй множитель равен 0,7. Затем я обновляю кадр Розового вида по:

pink constraints adjusted

Далее я добавить мнение распорного. Я не хочу, чтобы проставка была видна во время выполнения, поэтому я сделаю ее скрытой. Скрытые виды все еще участвуют в макете. Перед установкой ограничений, я просто поставил распорку слева от синей точки зрения:

spacer added

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

spacer constraints

Теперь я готов установить синий вид. Во-первых, я дам ему фиксированный размер:

blue size constraints

Второй я центрировать его по горизонтали в окне корня:

blue horizontal center

Третий Я придавить его вертикального центра к вертикальный центр распорный по:

blue vertical center

Это все Constrain Мне нужно.Я буду обновлять все кадры, чтобы проверить:

update all frames

я могу проверить его с помощью предварительного просмотра в редакторе помощника:

previews

Обратите внимание, что вид распорки не виден в предварительный просмотр, но все же участвует в компоновке.

+0

Спасибо за подробный ответ Rob. В настоящее время я использую подобный трюк (добавив представление контейнера, которое заполняет пустоту ниже вида A, а затем центрирует представление B внутри этого представления контейнера. Однако я надеялся, что будет любое другое решение, которое не потребует добавления каких-либо дополнительных представлений. Я делаю это программно (не используя построитель интерфейса для этого конкретного контроллера представления), поэтому добавление вспомогательных/контейнерных/распорных представлений просто кажется ненужным беспорядком. – quentinadam

+0

Это необходимо, если вы используете ограничения. –

+0

Хорошо, я соглашусь с ним как ответить – quentinadam

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