以编程方式更改StackView中按钮的宽度约束

时间:2020-07-05 13:57:02

标签: swift autolayout uistackview ios-autolayout

我有一个stackView,其中包含一些UItextfields和一个按钮。 我已经在ViewController viewDidLoad中限制了它,如下所示:

let stackView = UIStackView()
    stackView.axis = .vertical
    stackView.spacing = 40
    stackView.distribution = .fillEqually
    stackView.alignment = .fill
     
     stackView.addArrangedSubview(justAskYouSomeInfosLabel)
     stackView.addArrangedSubview(emailTextField)
     stackView.addArrangedSubview(passwordTextField)
     stackView.addArrangedSubview(againPasswordTextField)
     stackView.addArrangedSubview(registrationButton)
     
     
             //autolayout the stackview
     view.addSubview(stackView)
     stackView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: nil, bottom: nil, trailing: nil, padding: .init(top: 80, left: 0, bottom: 0, right: 0))
     stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
     stackView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.8).isActive = true

现在,我想减小stackView底部按钮的宽度。

我尝试过:

registrationButton.widthAnchor.constraint(equalToConstant: 80).isActive = true

如其他stackOverflow问题上所建议的那样,但它不起作用,并且在控制台上收到此错误:

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 

如何以编程方式减小按钮的宽度?

1 个答案:

答案 0 :(得分:1)

stackView.alignment = .fill行开始,您同意UIStackView的子视图的宽度与其父视图的宽度相同

将其更改为stackView.alignment = .centerstackView.alignment = .leading,以便您可以将按钮的宽度设置为其父按钮的宽度。