Swift stackview如何动态更改嵌套在其内部的元素之间的间距
几个月来,我一直在试图了解StackView及其工作原理。出于这个原因,我创建了一个项目,其中有4个按钮嵌套在一个宽度和高度恒定的堆栈视图中。现在,根据iPhone的屏幕大小,我希望stackview中的按钮保持其宽度和大小,但它们之间的间距变小或变大。如果我使用鼠标手动调整stackview的大小,这将非常完美。但是,当我添加应该具有相同效果的顶部和底部约束时,堆栈视图中的按钮会收缩或奇怪地拉伸,即使它们都具有恒定的高度且优先级设置为1000 您可以自己尝试创建一个堆栈视图,其中包含一些按钮,然后将其宽度和高度设置为常量。然后添加顶部和底部约束,并在比您正在创建它的屏幕更小的屏幕上预览它 在iPhone XS上预览,如果屏幕较小,按钮之间的间距应动态更改为较大或较小: 在iPhone 8上预览: 以及它应该是什么样子:Swift stackview如何动态更改嵌套在其内部的元素之间的间距,swift,xcode,autolayout,uistackview,Swift,Xcode,Autolayout,Uistackview,几个月来,我一直在试图了解StackView及其工作原理。出于这个原因,我创建了一个项目,其中有4个按钮嵌套在一个宽度和高度恒定的堆栈视图中。现在,根据iPhone的屏幕大小,我希望stackview中的按钮保持其宽度和大小,但它们之间的间距变小或变大。如果我使用鼠标手动调整stackview的大小,这将非常完美。但是,当我添加应该具有相同效果的顶部和底部约束时,堆栈视图中的按钮会收缩或奇怪地拉伸,即使它们都具有恒定的高度且优先级设置为1000 您可以自己尝试创建一个堆栈视图,其中包含一些按钮,
有人能给我解释一下为什么会发生这种情况,以及我如何才能达到我想要的结果吗?您不应该添加底部约束,而应该只向
UIStackView
添加高度约束,检查以下示例
let buttons = [UIButton(), UIButton(), UIButton(), UIButton()]
for (index, button) in buttons.enumerated() {
button.backgroundColor = .red
button.setTitle("Category Button \(index)", for: .normal)
button.setTitleColor(.black, for: .normal)
}
let stackView = UIStackView(arrangedSubviews: buttons)
stackView.axis = .vertical
stackView.distribution = .equalSpacing
stackView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(stackView)
let salGuide = self.view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalTo: salGuide.topAnchor, constant: 16.0),
stackView.centerXAnchor.constraint(equalTo: salGuide.centerXAnchor, constant: 0),
stackView.widthAnchor.constraint(equalTo: salGuide.widthAnchor, multiplier: 0.6),
stackView.heightAnchor.constraint(equalTo: salGuide.heightAnchor, multiplier: 0.6)
])
请注意,multiplier:0.6
为UIStackView
提供了60%的可用宽度和高度,要使用恒定宽度/高度,只需将参数名称从multiplier
更改为constant
,并提供适当的参数值
iPhone SE
iPhone Xs Max
你想要实现什么?