web-dev-qa-db-ja.com

ビューにUIStackView内で可能な限り多くのスペースをとるように強制します

アプリケーションのUIの一部をSwiftで作成していますが、直面している問題は、3つのサブビュー(2つのUILabelとUIImageView)を持つUIStackViewがあることです。私の最初のコード

let switchview = UISwitch()
let nodelableview = UILabel()
nodelableview.textAlignment = NSTextAlignment.right
nodelableview.numberOfLines = 0
nodelableview.text = nodes[i].type + " " + nodes[i].node_name
let statLabel = UILabel()
statLabel.textAlignment = NSTextAlignment.left
statLabel.text = nodes[i].stat
let stack = UIStackView()
stack.axis = .horizontal
stack.spacing = 16
stack.addArrangedSubview(statLabel)
stack.addArrangedSubview(nodelableview)
stack.addArrangedSubview(switchview)
cell.nodesView.addArrangedSubview(stack)

このコードの問題は、nodelabelviewに長いテキストがある場合、UIStackViewが拡張されて2行以上のスペースを確保できないことです。そこで、配置を.centerに設定すると、結果は次のようになります enter image description here

空のスペースが残っていますが、最初のUILabelはそれを無料で使用しています。 2番目のUILabelに使用可能なスペースを使用させるにはどうすればよいですか?

7
Amir_P

2番目のラベル(行数が無制限のラベル)を優先する設定は、「Fill Proportionally」分布に設定されたstackviewです(つまり、ビューのサイズが変更されますそれらの固有のサイズと抱擁/抵抗の優先順位に基づく)

enter image description here

左側のラベルとスイッチ(「必須」)の1000(「必須」)の水平方向の「コンテンツ圧縮抵抗優先度」と組み合わせる'圧縮しない'を意味します)

enter image description here

これはこれに解決されます:

enter image description here

13
Alladinian

各ラベル/スイッチの水平方向のcontentHuggingPrioritycontentCompressionResistanceを他のラベルとは異なるものに設定して、残りの使用可能なスペースを埋めるために拡張するもののハグ値が最小になるようにする必要がある場合があります。 。

2
Ash