我有一個UIScrollView
,填補所有的窗口,幷包含一個垂直UIStackView
這裏我想補充UILabels
填補所有可用的寬度。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
約束上不適用)
且僅當我改變標籤contraint使用滾動視圖它的工作原理是期望:
textLabel.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
爲什麼這種行爲?有人可以解釋爲什麼在UIStackView
的約束,因爲我希望不工作?
完整的源代碼avaiable at that gist
lujop嗨,'alignAllCenterX'在你的代碼沒有任何影響。你可以刪除它。 – BangOperator