Установить кнопку с использованием autolayout и ограничение

На экране 4 кнопки. Я хочу разместить все 4 кнопки на экране на одинаковом расстоянии, как показано на рисунке, на всех экранах, т.е. 4s,5s,6 и 6plus.

Ограничение, которое я добавил

Button 1 : 
Top , leading and trailing

Button 4: 
Bottom , leading and trailing

Button 2 : 
Leading
trailing
top to button 1

Button 3: 
    Leading
    trailing
    top to button 2
    bottom to button 4

Но я не могу достичь кнопки 2 и кнопки 3 с одинаковым расстоянием. Я хочу добиться этого только с помощью autolayout и ограничений.

Пожалуйста посоветуй.

введите описание изображения здесь

3 ответа

Решение

Полное решение с Autolayout.

Как, вы используете четное количество кнопок в вашем представлении, поэтому вам нужно добавить UILabel с высотой 2 в центре (X & Y) позиции представления. Следующие ограничения будут работать на всех экранах, т.е. 4s,5s,6 и 6plus.

[Примечание: в случае нечетных кнопок вместо метки будет использоваться центральная КНОПКА]

Ограничения:

Метка: 1. Центр-X 2. Центр-Y 3. Зафиксируйте высоту и ширину (высота = 2, ширина = без ограничений)

Кнопка 1:

  1. Снизу до кнопки 2 (например, 70)

  2. Центр-X

  3. фиксировать высоту ширина

Кнопка 2:

  1. КНОПКА 3 (например, 70)

  2. Снизу до ЭТИКЕТКИ (например, 34)

  3. Центр-X

  4. фиксировать высоту ширина

Кнопка 3:

  1. Верх к ЭТИКЕТКЕ (например, 34)

  2. Дно КНОПКИ 4 (например, 70)

  3. центр X

  4. фиксировать высоту ширина

Кнопка 4:

  1. Сверху КНОПКА-3 (например, 70)

  2. Центр-X

  3. фиксировать высоту ширина

Это можно реализовать исключительно с помощью Interface Builder:

Если вы хотите поддерживать версии iOS до iOS9

  1. Вам нужно использовать скрытую проставку UIViews (оранжевый на картинке ниже)
  2. Их высоты должны быть равны друг другу
  3. Расстояние между кнопками и их соседними видами распорок должно быть установлено на 0

Это дает вам возможность создавать адаптивные макеты для каждого типа устройства (если вы установите высоту вида распорки пропорциональной высоте суперпредставления):

Для iOS9+ просто используйте UIStackView с вертикальной осью и желаемым пространством распределения

Попробуй вот так,

ваши ограничения должны быть,

кнопка 1 - верхний, ведущий и задний или горизонтальный центр в контейнере.

кнопка 2 - верхний, ведущий и задний или горизонтальный центр в контейнере.

кнопка 4 - нижний, ведущий и задний или горизонтальный центр в контейнере.

кнопка 3 - нижний, ведущий и задний или горизонтальный центр в контейнере.

теперь для кнопки 2 взять выход верхнего ограничения (ctrl+ перетащить из ограничения в класс) и из кнопки 3 взять выход нижнего ограничения.

например, ваша розетка - button2Outlet и button3Outlet соответственно.

Итак, из viewdidload,

CGFloat constantVslue = self.view.frame.size.height - (4 * buttonHeight) - 40 (top distance of button 1 + bottom distance of button 4); 

//40 is distance from top and bottom of 1st and 4th button respactively in my case (20+20) and in my case my button height is 30 so total 120.

CGFloat distance = constantVslue/3;

self.button2Outlet.constant = distance;
self.button3Outlet.constant = distance;

Надеюсь, это поможет:)

Другие вопросы по тегам