Ответ
Основное различие — ось (axis), вдоль которой располагаются дочерние представления (arrangedSubviews).
| Атрибут | Горизонтальный (axis = .horizontal) |
Вертикальный (axis = .vertical) |
|---|---|---|
| Направление | Слева направо (или RTL) | Сверху вниз |
Распределение (distribution) |
Управляет шириной subviews | Управляет высотой subviews |
Выравнивание (alignment) |
Управляет позицией по вертикали | Управляет позицией по горизонтали |
Пример создания:
// Горизонтальный стек
let hStack = UIStackView(arrangedSubviews: [label, button])
hStack.axis = .horizontal
hStack.distribution = .fillEqually
// Вертикальный стек
let vStack = UIStackView(arrangedSubviews: [titleLabel, subtitleLabel])
vStack.axis = .vertical
vStack.spacing = 8.0
Свойства spacing и isBaselineRelativeArrangement работают одинаково для обеих ориентаций. Выбор оси определяется макетом: строки элементов — горизонтальная, колонки/списки — вертикальная.