私はUIScrollView
にすべてのウィンドウを塗りつぶしています。これには、使用可能なすべての幅を埋めるUILabels
を追加したい垂直のUIStackView
が含まれています。UIStackViewを制約することはできますか?
UIStackView
はUIScrollView
のすべてのエッジに固定されており、UIScrollView
をすべて埋めると考えられます。しかし、それは完全にすべてのconstriantsを無視して、それはそれだけの子供に合うサイズです。なぜその行動ですか?私はそのようにラベル追加した場合ことを示すために
:
scrollView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[stackView]|", options: NSLayoutFormatOptions.alignAllCenterX, metrics: nil, views: ["stackView": stackView]))
scrollView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[stackView]|", options: NSLayoutFormatOptions.alignAllCenterX, metrics: nil, views: ["stackView": stackView]))
for _ in 1 ... 20 {
let textLabel = UILabel()
textLabel.backgroundColor = UIColor.yellow
textLabel.text = "Hi World xxxx"
stackView.addArrangedSubview(textLabel)
textLabel.widthAnchor.constraint(equalTo: stackView.widthAnchor).isActive = true //Doesn't work as expected
}
を私が得るものはこれです:(シアンの背景がUIScrollView
であり、あなたはラベルが原因それにすべての幅をとらないことがわかりますUIStackView
contraintsは)
を適用しません。そして、私はscrollViewを使用するラベルcontraintを変更する場合にのみ、必要に応じて、それが動作します:
0123予想通りtextLabel.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
なぜその行動?誰かが私が期待している通りにUIStackView
の制約がうまくいかない理由を説明することができますか?
完全なソースコードavaiable at that gist
こんにちはlujop、 'alignAllCenterX'はあなたのコードには何の効果もありません。それを削除することができます。 – BangOperator