Для однозначного определения положения и размера UIView в AutoLayout необходимо задать 4 constraints. Это связано с тем, что нужно определить:
Каждый view в AutoLayout требует определения:
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
parentView.addSubview(view)
// Минимальный набор constraints
NSLayoutConstraint.activate([
view.leadingAnchor.constraint(equalTo: parentView.leadingAnchor, constant: 20), // X позиция
view.topAnchor.constraint(equalTo: parentView.topAnchor, constant: 30), // Y позиция
view.widthAnchor.constraint(equalToConstant: 100), // Ширина
view.heightAnchor.constraint(equalToConstant: 50) // Высота
])
let label = UILabel()
label.text = "Hello"
// Достаточно только позиционирования:
NSLayoutConstraint.activate([
label.leadingAnchor.constraint(equalTo: view.leadingAnchor),
label.topAnchor.constraint(equalTo: view.topAnchor)
])
// Пример с центрированием и относительными размерами
NSLayoutConstraint.activate([
view.centerXAnchor.constraint(equalTo: parentView.centerXAnchor), // X
view.centerYAnchor.constraint(equalTo: parentView.centerYAnchor), // Y
view.widthAnchor.constraint(equalTo: parentView.widthAnchor, multiplier: 0.5), // Ширина
view.heightAnchor.constraint(equalToConstant: 100) // Высота
])
UIStackView:
Safe Area constraints:
// Пример с safe area
NSLayoutConstraint.activate([
view.leadingAnchor.constraint(equalTo: parentView.safeAreaLayoutGuide.leadingAnchor),
view.topAnchor.constraint(equalTo: parentView.safeAreaLayoutGuide.topAnchor),
view.widthAnchor.constraint(equalToConstant: 200),
view.heightAnchor.constraint(equalToConstant: 100)
])
Система AutoLayout проверяет:
Правило 4 constraints - это основа, но в реальных проектах часто используются более сложные системы отношений между элементами.