为啥在所有边缘上固定 UIStackView 会导致模棱两可的约束错误?
Posted
技术标签:
【中文标题】为啥在所有边缘上固定 UIStackView 会导致模棱两可的约束错误?【英文标题】: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)>
【问题讨论】:
【参考方案1】:也添加下面的代码,
stack.translatesAutoresizingMaskIntoConstraints = false
【讨论】:
啊,我觉得很傻。我正在研究一个更复杂的示例,并且在简化代码以发布此问题的过程中,我不小心删除了该行并最终提出了错误的问题! ?♂️以上是关于为啥在所有边缘上固定 UIStackView 会导致模棱两可的约束错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIStackView 中分隔 UITextField 前沿和训练边缘?
使用 AutoLayout 调整 UIStackView 的大小