我有一个 UIScrollView
可以填充所有窗口并且包含一个垂直的 UIStackView
我想在其中添加 UILabels
以填充所有可用宽度.
UIStackView
固定在 UIScrollView
的所有边缘,我希望它填充所有 UIScrollView
。但它似乎完全忽略了所有的约束,并且它的尺寸只适合它的 child 。为什么会有这种行为?
为了说明如果我以这种方式添加标签:
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
约束没有占用所有宽度申请)
只有当我将标签约束更改为使用 scrollView 时,它才能按预期工作:
textLabel.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
为什么会有这种行为?有人可以解释为什么 UIStackView
上的约束没有像我预期的那样工作吗?
最佳答案
一切都是正确的。只是您没有指定内容 View (堆栈 View )的宽度。 添加这一行,一切都会完美无缺。
scrollView.widthAnchor.constraint(equalTo: stackView.widthAnchor, multiplier: 1).isActive = true;
注意:将 ScrollView 的前导尾随固定到内容 View 不会为内容 View 提供宽度。需要单独的宽度约束,否则内容 View 的宽度将等于其固有宽度。 友情链接:https://stackoverflow.com/a/18341997/1790683
关于ios - UIStackView 可以被约束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40785244/