如何使 stackview 中的按钮根据屏幕大小更改大小(使用 main.storyboard 或代码)

how to make buttons in stackview change size depending on screen size (using main.storyboard or code)

我想弄清楚如何使堆栈视图中的三个按钮具有相对大小并在不同设备上保持相同的乘数间距,例如与 iphone 相比,如果我在 ipad 上,按钮会更大。其次,与 iphone 设备相比,ipad 设备上按钮左右边缘之间的间距更大。到目前为止,我目前在堆栈视图中有三个按钮。我在堆栈视图中添加了水平和垂直对齐。我试过添加相等的高度和宽度并更改乘数以及向按钮添加约束,但是它没有得到我想要的结果。 这是我希望如何将我的项目放置在所有设备上的屏幕截图:

UIStackView 只有静态间距。您有两个选择:

  1. 使用 viewWillLayoutSubviews 更改代码内的间距。我比 viewDidLayoutSubviews 更喜欢它,因为更改将跟随旋转动画。但是如果你的计算将依赖于其他子视图(不仅仅是 self.view),这些框架将不会被更新。您也可以这样更改 constraint.constant
@IBOutlet var stackView: UIStackView!

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    stackView.spacing = view.bounds.height * 0.05
}
  1. 仅使用情节提要,无法使用修饰符添加间距约束。但是您可以添加一个透明视图作为您的间隔物,并对其应用 width/height 修饰符。这既可以用于 UIStackView 也可以用于普通视图。

我更喜欢为所有具有相同大小的视图添加等高约束(如btn1.height = btn2.height, btn1.height = btn3.height),因此我可以为所有视图设置一个约束的大小(btn1.height = superview.height * 0.1)。

像这样的东西应该适合你的:

结果: