嵌套在UIScrollView内的UIStackViews:无法填充容器的宽度?

时间:2019-09-03 21:17:44

标签: ios swift uiscrollview uikit uistackview

我正在尝试使用UIButton内的嵌套UIStackView来以编程方式创建{x {1}}的3x33网格。外部UIScrollView具有垂直轴,而内部UIStackView具有水平轴和UIStackView

如果我没有随附的distribution = .fillEqually,则按钮会正确填满屏幕的宽度。 使用滚动视图,但是按钮仅占屏幕宽度的一半。

这是一个代码示例。在IB中,UIScrollView的{​​{1}}属性已设置为ViewController实例。

view

1 个答案:

答案 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约束指定。