СМОТРИ, НЕ ПРОСТРАНСТВ!
Основываясь на предложениях в разделе комментариев моего первоначального ответа, особенно на полезных предложениях @ Rivera, я упростил свой первоначальный ответ.
Я использую картинки, чтобы проиллюстрировать, насколько это просто. Надеюсь, вы найдете гифки полезными. На случай, если у вас возникли проблемы с гифками, я включил старый ответ ниже с простыми снимками экрана.
Инструкции:
1) Добавьте свои кнопки или ярлыки. Я использую 3 кнопки.
2) Добавьте ограничение по центру от каждой кнопки в суперпредставление:
3) Добавьте ограничение для каждой кнопки в ограничение нижнего макета:
4) Настройте ограничение, добавленное в # 3 выше, следующим образом:
а) выберите ограничение,
б) удалите константу (установите в 0),
в) измените множитель следующим образом: возьмите количество кнопок + 1 и, начиная сверху, установите множитель как buttonCountPlus1: 1 , а затем buttonCountPlus1 : 2 и, наконец, buttonCountPlus1: 3 . (Я объясню, откуда я взял эту формулу в старом ответе ниже, если вам интересно).
5) Вот демо-ход!
Примечание. Если ваши кнопки имеют большую высоту, вам нужно будет компенсировать это постоянным значением, поскольку ограничение находится снизу кнопки.
Старый ответ
Несмотря на то, что говорится в документах Apple и в превосходной книге Эрики Садун (« Автоматическая разметка» ), можно равномерно распределять изображения без прокладок. Это очень просто сделать в IB и в коде для любого количества элементов, которые вы хотите разместить равномерно. Все, что вам нужно, это математическая формула, называемая «формула раздела». Это проще сделать, чем объяснить. Я сделаю все возможное, продемонстрировав это в IB, но это так же легко сделать в коде.
В рассматриваемом примере вы бы
1) начните с установки каждой метки, чтобы иметь ограничение по центру. Это очень просто сделать. Просто управляйте перетаскиванием от каждой метки вниз.
2) Удерживайте нажатой клавишу Shift, так как вы могли бы также добавить другое ограничение, которое мы будем использовать, а именно «руководство по разметке от нижнего пространства к нижнему».
3) Выберите «руководство по разметке от нижнего пространства до нижнего» и «центрировать горизонтально в контейнере». Сделайте это для всех 3 ярлыков.
По сути, если мы возьмем метку, координату которой мы хотим определить, и разделим ее на общее количество меток плюс 1, то у нас будет число, которое мы можем добавить в IB, чтобы получить динамическое местоположение. Я упрощаю формулу, но вы можете использовать ее для установки горизонтального интервала или как вертикального, так и горизонтального одновременно. Это супер мощный!
Вот наши множители.
Label1 = 1/4 = .25,
Label2 = 2/4 = .5,
Label3 = 3/4 = 0,75
(Правка: @Rivera прокомментировал, что вы можете просто использовать отношения прямо в поле множителя, а xCode с помощью math!)
4) Итак, давайте выберем Label1 и выберем нижнее ограничение. Как это:
5) Выберите «Второй элемент» в инспекторе атрибутов.
6) В раскрывающемся списке выберите «Поменять местами первый и второй элемент».
7) Обнулить константу и значение wC hAny. (Вы можете добавить смещение здесь, если вам это нужно).
8) Это критическая часть: в поле множителя добавьте наш первый множитель 0,25.
9) Пока вы это делаете, установите верхний «Первый элемент» на «CenterY», так как мы хотим центрировать его по центру y метки. Вот как все это должно выглядеть.
10) Повторите этот процесс для каждой метки и вставьте соответствующий множитель: 0,5 для метки 2 и 0,75 для метки 3. Вот конечный продукт во всех направлениях со всеми компактными устройствами! Супер просто. Я смотрел на множество решений, включающих множество кода и разделителей. Это, безусловно, лучшее решение, которое я видел по этому вопросу.
Обновление: @kraftydevil добавляет, что руководство по макету Bottom появляется только в раскадровках, а не в XIBS. Используйте «Нижнее пространство для контейнера» в XIBS. Хороший улов!