Установить кнопку с использованием 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:
Снизу до кнопки 2 (например, 70)
Центр-X
фиксировать высоту ширина
Кнопка 2:
КНОПКА 3 (например, 70)
Снизу до ЭТИКЕТКИ (например, 34)
Центр-X
фиксировать высоту ширина
Кнопка 3:
Верх к ЭТИКЕТКЕ (например, 34)
Дно КНОПКИ 4 (например, 70)
центр X
фиксировать высоту ширина
Кнопка 4:
Сверху КНОПКА-3 (например, 70)
Центр-X
фиксировать высоту ширина
Это можно реализовать исключительно с помощью Interface Builder:
Если вы хотите поддерживать версии iOS до iOS9
- Вам нужно использовать скрытую проставку UIViews (оранжевый на картинке ниже)
- Их высоты должны быть равны друг другу
- Расстояние между кнопками и их соседними видами распорок должно быть установлено на 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;
Надеюсь, это поможет:)