В AutoLayout constraints (ограничения) имеют несколько ключевых атрибутов, которые определяют их поведение. Рассмотрим каждый из них подробно.
Определяет, какой параметр первого элемента участвует в ограничении:
NSLayoutConstraint.Attribute:
.left // Левый край (для RTL меняется на .right)
.right // Правый край (для RTL меняется на .left)
.leading // Начальный край (учитывает RTL)
.trailing // Конечный край (учитывает RTL)
.top // Верхний край
.bottom // Нижний край
.width // Ширина
.height // Высота
.centerX // Центр по горизонтали
.centerY // Центр по вертикали
.firstBaseline // Базовая линия текста (первая строка)
.lastBaseline // Базовая линия текста (последняя строка)
Аналогичен первому, но относится ко второму элементу в ограничении. Может быть .notAnAttribute
, если ограничение не связано с другим элементом.
Определяет математическое отношение между атрибутами:
NSLayoutConstraint.Relation:
.equal // Равно (==)
.greaterThanOrEqual // Больше или равно (>=)
.lessThanOrEqual // Меньше или равно (<=)
Числовое значение, добавляемое к атрибуту:
view1.leadingAnchor.constraint(equalTo: view2.trailingAnchor, constant: 20)
// Здесь 20 — это constant
Коэффициент, на который умножается значение атрибута:
view1.widthAnchor.constraint(equalTo: view2.widthAnchor, multiplier: 0.5)
// Здесь 0.5 — multiplier
Важность ограничения (от 1 до 1000):
let constraint = view.widthAnchor.constraint(equalToConstant: 200)
constraint.priority = .defaultHigh // 750
// Доступные стандартные приоритеты:
// .required (1000), .defaultHigh (750), .defaultLow (250)
Флаг, определяющий, активно ли ограничение:
constraint.isActive = true // Ограничение учитывается в layout
constraint.isActive = false // Ограничение игнорируется
let constraint = NSLayoutConstraint(
item: view1,
attribute: .leading,
relatedBy: .equal,
toItem: view2,
attribute: .trailing,
multiplier: 1.0,
constant: 20.0
)
constraint.priority = .defaultHigh
constraint.isActive = true
Safe Area Attributes (iOS 11+):
.safeAreaLayoutGuide
(leading, trailing, top, bottom)Content Hugging Priority:
contentHuggingVertical/Horizontal
)Compression Resistance Priority:
compressionResistanceVertical/Horizontal
)Основные атрибуты Constraint включают:
Понимание этих атрибутов критически важно для: