我如何使一个Swift UIStackView的大小动态基于内容?



我已经添加了以下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将保持居中

相关内容

  • 没有找到相关文章