私はまだこれに対する答えを見つけていませんし、それが可能かどうかはわかりませんが、水平_UIStackView
を右揃えしようとしていますので、サブビューが隠れている場合は右側に移動します左ではありません。プログラムで(Swiftで)またはInterface Builderを使用して
UIStackView
sは、ユーザーのテキスト方向に従って整列します。つまり、英語およびその他のローマ字スクリプト言語では左揃え、ヘブライ語などの言語では右揃えです。
私の意見では、レイアウト上の理由でこれを変更することはテキスト方向APIの誤用であり、ちょっとしたハックかもしれませんが、それを念頭に置いてください:
セマンティックドロップダウンを使用して、インターフェイスビルダーで特定のビューの方向を変更できます。セマンティックドロップダウンには、「左から右に強制」および「右から左に強制」のオプションがあります。また、それらが表示される順序。したがって、スタックビューの要素の順序を逆にする必要があります。
または、ビューのsemanticContentAttribute
を使用してコードで実行できます
stackView.semanticContentAttribute = .forceRightToLeft
2つのUIStackView
sを含む水平方向のUIView
がありました。ビューの1つを非表示にすると、他のビューが全幅に広がります。残りのビューに幅の制約を追加すると、目的の幅が維持されますが、右に移動しました。
TL; DR
スタックビューに非表示のUIView
を追加します。これは、他のスペーシングがスペースのために非表示になったときに表示されます。
私にとって最も効果的なのは、水平スタックビューを垂直スタックビュー内に配置し、垂直スタックビューをリーディングに設定することでした
他の答えとは異なり、ソリューションは実際には非常に簡単です。必要なのは、スタックビューをスーパービューのトレーリングエッジに固定するトレーリング制約を追加し、スーパービューのリーディングエッジに固定するリーディング制約を追加することです。
ただし、重要なのは、主要なスタックビューの制約関係をequalから以上に変更することです。
これにより、スタックビューのリーディングエッジがスタックビューのコンテンツの固有の幅にスナップし、すべてをトレーリングエッジに効果的に固定できます。
垂直スタックビューも同様です。上部に等しいを固定し、下部を以下に固定します。
そう:
stackView.leadingAnchor.constraint(greaterThanOrEqualTo: parent.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: parent.trailingAnchor).isActive = true
stackView.distribution = .equalSpacing