我正在尝试使用UIButton
内的嵌套UIStackView
来以编程方式创建{x {1}}的3x33网格。外部UIScrollView
具有垂直轴,而内部UIStackView
具有水平轴和UIStackView
。
如果我没有随附的distribution = .fillEqually
,则按钮会正确填满屏幕的宽度。 使用滚动视图,但是按钮仅占屏幕宽度的一半。
这是一个代码示例。在IB中,UIScrollView
的{{1}}属性已设置为ViewController
实例。
view
答案 0 :(得分:1)
您希望您的scrollView的内容宽度为scrollView本身的宽度,以使其充满屏幕并垂直滚动。
为此,您需要确定scrollView内容的宽度。现在,它是通过三个按钮的固有大小来获得宽度的。
您需要添加一个约束,以明确地使scrollView的内容(stackView +左右偏移量)等于scrollView的宽度:
view.addConstraints(NSLayoutConstraint.constraints(
withVisualFormat: "H:|-20-[stackView]-20-|", options: .alignAllCenterX,
metrics: nil, views: ["stackView": stackView!]))
view.addConstraints(NSLayoutConstraint.constraints(
withVisualFormat: "V:|[stackView]|", options: .alignAllCenterY,
metrics: nil, views: ["stackView": stackView!]))
stackView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -40).isActive = true
注意:调整constant
-40
是左右偏移量的总和(各为20
)。为了使scrollView不能水平滚动:stackView.width + 20 + 20 == scrollView.width
或等效地使用stackView.width == scrollView.width - 40
约束指定。