使用AutoLayout和UIStackView,将titleLabel的numberOfLines设置为0,使其具有动态高度,并将按钮包装在水平或垂直方向的UIStackView中。在更改按钮标题时,调用layoutIfNeeded()方法以使AutoLayout重新计算按钮大小。
示例代码:
let button = UIButton()
button.setTitle("Long Button Text", for: .normal)
button.titleLabel?.numberOfLines = 0
let stackView = UIStackView(arrangedSubviews: [button])
stackView.axis = .horizontal
stackView.alignment = .center
stackView.spacing = 8
view.addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
])
// 更改按钮标题
button.setTitle("Short", for: .normal)
stackView.layoutIfNeeded()