【发布时间】:2017-04-08 16:32:32
【问题描述】:
我有一个UIScrollView,它填充了所有窗口,其中包含一个垂直的UIStackView,我想在其中添加填充所有可用宽度的UILabels。
UIStackView 被固定到UIScrollView 的所有边缘,我希望它填充所有UIScrollView。但它似乎完全忽略了所有的约束,它的大小只适合它的孩子。为什么会有这种行为?
为了说明如果我以这种方式添加标签:
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 的约束不能按我的预期工作?
【问题讨论】:
-
嗨 lujop,
alignAllCenterX对您的代码没有影响。你可以删除它。
标签: ios cocoa-touch autolayout uistackview