Как вы выравниваете горизонтальный UIStackView?

Я еще не нашел ответа для этого в любом месте, и я не уверен, если это возможно, но я пытаюсь правильно выровнять горизонтальный UIStackView, так что если subviews скрыты, они перемещаются вправо не слева. Либо программно (в Swift), либо с помощью Interface Builder

Ответ 1

UIStackView выровнять в соответствии с направлением текста пользователя, то есть выравнивать по левому краю для английского и других языков Roman script или выравниваться по правому краю для таких языков, как иврит.

По моему мнению, изменение этого варианта макета может быть неправильным использованием API-интерфейсов направления текста и немного взломать, но с учетом этого:

Вы можете изменить направление для определенного вида в построителе интерфейса, используя раскрывающийся список "Семантика", в котором есть опции "Сила слева направо" и "Сила справа налево", которая изменит направление, в котором они pop, а также порядок, в котором они отображаются. Таким образом, вам придется изменить порядок элементов в представлении стека

Семантический селектор в IB

Или вы можете сделать это в коде, используя представление semanticContentAttribute

stackView.semanticContentAttribute = .forceRightToLeft

Ответ 2

У меня был горизонтально ориентированный UIStackView содержащий два UIView s; сокрытие одного вида привело к тому, что другое распространилось на всю ширину. Добавление ограничения ширины к оставшемуся виду привело к сохранению желаемой ширины, но она сместилась вправо.

TL; DR

Добавьте скрытый UIView в представление стека, которое показывает, когда другой скрыт для пробелов.

Ответ 3

Для меня лучше всего было поместить мой горизонтальный вид в стеке в вертикальный вид в стеке и установить вертикальное выравнивание на ведущее

Ответ 4

В отличие от других ответов, решение на самом деле довольно простое. Вам нужно добавить конечное ограничение, которое прикрепляет представление стека к заднему краю его суперпредставления, а затем также добавить ведущее ограничение, которое прикрепляет его к переднему краю суперпредставления.

Однако хитрость заключается в том, чтобы изменить отношение ограничения ведущего стека с равного на большее или равное.

Это позволит переднему краю стекового представления привязаться к внутренней ширине содержимого стекового представления, эффективно закрепив все до заднего края.

Вертикальный вид стека похожи. Прикрепите верхнюю часть равными, а нижнюю - меньше или равными.

Так:

stackView.leadingAnchor.constraint(greaterThanOrEqualTo: parent.leadingAnchor).isActive = true

stackView.trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true

stackView.distribution = .equalSpacing