Мне еще нигде не удалось найти ответ на этот вопрос, и я не уверен, что это возможно, но я пытаюсь выровнять по правому краю горизонтальный UIStackView
, чтобы, если подпредставления были скрыты, они двигались к правой стороне, а не к левой. Либо программно (в Swift), либо с помощью Interface Builder
Как правильно выровнять горизонтальный UIStackView?
Ответы (4)
UIStackView
s выравниваются в соответствии с направлением текста пользователя, т. е. выравниваются по левому краю для английского и других языков с латинской графикой или выравниваются по правому краю для таких языков, как иврит.
На мой взгляд, изменение этого по причинам макета может быть неправильным использованием API-интерфейсов направления текста и немного взлома, но с учетом этого:
Вы можете изменить направление для определенного представления в построителе интерфейса, используя раскрывающийся список «Семантика», в котором есть параметры «Принудительно слева направо» и «Принудительно справа налево», которые изменят направление, в котором они появляются, но также порядок, в котором они отображаются. Таким образом, вам придется изменить порядок элементов в вашем стеке
Или вы можете сделать это в коде, используя представление semanticContentAttribute
stackView.semanticContentAttribute = .forceRightToLeft
Лучше всего для меня работало то, что я поместил горизонтальное представление стека внутри вертикального представления стека и установил вертикальное выравнивание на ведущее
В отличие от других ответов, решение на самом деле довольно простое. Что вам нужно, так это добавить конечное ограничение, которое прикрепляет представление стека к заднему краю его суперпредставления, а затем также добавить ведущее ограничение, которое прикрепляет его к переднему краю суперпредставления.
Хитрость, однако, заключается в изменении ведущего отношения ограничения представления стека с равно на больше или равно.
Это позволит переднему краю представления стека привязаться к внутренней ширине содержимого представления стека, эффективно прикрепив все к заднему краю.
Представления вертикального стека аналогичны. Закрепите верхнюю часть равными, а нижнюю закрепите меньшим или равным.
So:
stackView.leadingAnchor.constraint(greaterThanOrEqualTo: parent.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true
stackView.distribution = .equalSpacing
У меня был горизонтально ориентированный UIStackView
, содержащий два UIView
; скрытие одного из представлений привело к тому, что другое расширилось на всю ширину. Добавление ограничения ширины к оставшемуся виду привело к сохранению желаемой ширины, но сместилось вправо.
TL;DR
Добавьте скрытый UIView
в представление стека, которое показывает, когда другой скрыт для интервала.
stackView.distribution = UIStackViewDistributionFill;
и stackView.alignment = UIStackViewAlignmentCenter;
- person Kampai; 11.06.2018