我已经添加了以下UIStackView到我的ViewController。随着视图的改变,textelabel和textTwoLabel的值也随之改变。
使用以下代码,初始StackView居中,部分按比例填充。然而,在随后的文本组合中,StackView的边界不会改变,从而使内容偏离中心。我如何改变StackView属性,使其适应内容并始终保持居中?
headerStackView.axis = .horizontal
headerStackView.distribution = .fillProportionally
headerStackView.spacing = 8
headerStackView.layer.borderWidth = 1
headerStackView.layer.borderColor = UIColor.red.cgColor
headerStackView.translatesAutoresizingMaskIntoConstraints = false
headerStackView.topAnchor.constraint(equalTo: timerHeader.topAnchor, constant: 4).isActive = true
headerStackView.centerXAnchor.constraint(equalTo: timerHeader.centerXAnchor).isActive = true
headerStackView.addArrangedSubview(textOneLabel)
headerStackView.addArrangedSubview(textTwoLabel)
首先,忘了你听说过.fillProportionally
…
- 它不做你想做的事情
- 你会遇到非常意想不到的布局问题,如果你的堆栈视图的间距大于零
- 如果你的堆栈视图没有宽度(既没有宽度锚也没有领先/落后锚),
.fillProportionally
不做任何事情
因此,将.distribution
更改为.fill
。
添加这些行来控制自动布局对标签的处理:
textOneLabel.setContentHuggingPriority(.required, for: .horizontal)
textOneLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
textTwoLabel.setContentHuggingPriority(.required, for: .horizontal)
textTwoLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
现在,你的stackviewframe将保持居中