【问题标题】:Why does pinning a UIStackView on all edges cause an ambiguous constraint Error?为什么在所有边缘上固定 UIStackView 会导致模棱两可的约束错误?
【发布时间】:2020-05-08 12:34:46
【问题描述】:

以下代码尝试以编程方式将 UIStackView 固定在所有边缘 - 即使其全屏显示。这些看似简单的约束是什么导致了这个错误?

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let stack = UIStackView(arrangedSubviews: [])

        view.addSubview(stack)
        NSLayoutConstraint.activate([
            stack.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            stack.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            stack.topAnchor.constraint(equalTo: view.topAnchor),
            stack.bottomAnchor.constraint(equalTo: view.bottomAnchor),
        ])
    }

}

在调试器中打印的约束错误(链接到WTFAutoLayout):

(
    "<NSAutoresizingMaskLayoutConstraint:0x600003407840 h=--& v=--& UIStackView:0x7f97e240f020.width == 0   (active)>",
    "<NSLayoutConstraint:0x60000340ccd0 H:|-(0)-[UIStackView:0x7f97e240f020]   (active, names: '|':UIView:0x7f97e6002d90 )>",
    "<NSLayoutConstraint:0x60000340dd10 UIStackView:0x7f97e240f020.trailing == UIView:0x7f97e6002d90.trailing   (active)>",
    "<NSLayoutConstraint:0x6000034073e0 'UIView-Encapsulated-Layout-Width' UIView:0x7f97e6002d90.width == 414   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x60000340dd10 UIStackView:0x7f97e240f020.trailing == UIView:0x7f97e6002d90.trailing   (active)>

【问题讨论】:

    标签: swift autolayout uikit constraints uistackview


    【解决方案1】:

    也添加下面的代码,

    stack.translatesAutoresizingMaskIntoConstraints = false
    

    【讨论】:

    • 啊,我觉得很傻。我正在研究一个更复杂的示例,并且在简化代码以发布此问题的过程中,我不小心删除了该行并最终提出了错误的问题! ?‍♂️
    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2015-07-22
    • 2022-11-02
    • 2018-02-23
    • 1970-01-01
    相关资源
    最近更新 更多