В чем различия между горизонтальным и вертикальным UIStackView?

Ответ

Основное различие — ось (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 работают одинаково для обеих ориентаций. Выбор оси определяется макетом: строки элементов — горизонтальная, колонки/списки — вертикальная.

Ответ 18+ 🔞

А, слушай, вот этот твой UIStackView, он же как два стула с одной жопой, только в коде. Всё упирается в одну хуйню — ось, axis то есть. Куда он твои вьюхи пихать будет — в рядок или в столбик.

Смотри, табличка, чтоб не ебал мозг:

Штука Горизонтально (axis = .horizontal) Вертикально (axis = .vertical)
Куда смотрит Слева направо (или наоборот, если араб) Сверху вниз, как с горки
Распределение (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 — они, блядь, универсальные солдаты, для любой ориентации годятся. Выбирай ось по смыслу: если строчка кнопок — горизонталь, если список, колонка — вертикаль. Всё просто, ёпта. Не усложняй.