以编程方式更改 UIStackView 中 1 个子视图的大小
Programmatically changing size of 1 subview in UIStackView
我目前正在制作一个计算器,并想将 0
按钮的大小更改为 2 个子视图的大小 - 即整个视图大小的一半。我希望它看起来像苹果计算器应用程序,其中 0
比所有其他按钮都大。
我布局视图的方式是使用垂直 UIStackView
并向其添加水平 UIStackView
,如下图所示。
因此,我希望最后一个水平堆栈有 3 个排列的子视图,但是让 0
按钮填充超过 space,所以 ,
和 =
按钮与所有其他按钮的大小相同。
谢谢。
您可以对前 4 个水平堆栈视图使用 stackview.distribution = .fillEquallly,对最后一个水平堆栈视图使用 stackview.distribution = .fillPropotionally。
然后将 0 按钮的约束设置为最后一个水平堆栈视图宽度的 50%。
编程,你可以用constraint(equalTo:multiplier:)
设置乘数,官方文档:https://developer.apple.com/documentation/uikit/nslayoutdimension/1500951-constraint
因此我们可以将最后两个按钮约束为相同的宽度,并使第一个按钮比其他两个按钮长两倍。
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let btn1 = UIButton()
let btn2 = UIButton()
let btn3 = UIButton()
btn1.backgroundColor = .red
btn2.backgroundColor = .yellow
btn3.backgroundColor = .blue
let hStack = UIStackView(arrangedSubviews: [btn1, btn2, btn3])
hStack.axis = .horizontal
hStack.spacing = 1
view.addSubview(hStack)
hStack.translatesAutoresizingMaskIntoConstraints = false
hStack.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
hStack.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
hStack.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
// Here would be what you need:
btn2.widthAnchor.constraint(equalTo: btn3.widthAnchor).isActive = true
btn1.widthAnchor.constraint(equalTo: btn2.widthAnchor, multiplier: 2).isActive = true
}
我目前正在制作一个计算器,并想将 0
按钮的大小更改为 2 个子视图的大小 - 即整个视图大小的一半。我希望它看起来像苹果计算器应用程序,其中 0
比所有其他按钮都大。
我布局视图的方式是使用垂直 UIStackView
并向其添加水平 UIStackView
,如下图所示。
因此,我希望最后一个水平堆栈有 3 个排列的子视图,但是让 0
按钮填充超过 space,所以 ,
和 =
按钮与所有其他按钮的大小相同。
谢谢。
您可以对前 4 个水平堆栈视图使用 stackview.distribution = .fillEquallly,对最后一个水平堆栈视图使用 stackview.distribution = .fillPropotionally。
然后将 0 按钮的约束设置为最后一个水平堆栈视图宽度的 50%。
编程,你可以用constraint(equalTo:multiplier:)
设置乘数,官方文档:https://developer.apple.com/documentation/uikit/nslayoutdimension/1500951-constraint
因此我们可以将最后两个按钮约束为相同的宽度,并使第一个按钮比其他两个按钮长两倍。
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let btn1 = UIButton()
let btn2 = UIButton()
let btn3 = UIButton()
btn1.backgroundColor = .red
btn2.backgroundColor = .yellow
btn3.backgroundColor = .blue
let hStack = UIStackView(arrangedSubviews: [btn1, btn2, btn3])
hStack.axis = .horizontal
hStack.spacing = 1
view.addSubview(hStack)
hStack.translatesAutoresizingMaskIntoConstraints = false
hStack.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
hStack.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
hStack.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
// Here would be what you need:
btn2.widthAnchor.constraint(equalTo: btn3.widthAnchor).isActive = true
btn1.widthAnchor.constraint(equalTo: btn2.widthAnchor, multiplier: 2).isActive = true
}