为什么在这种情况下我的布局约束会返回错误? (Swift)

Why is my layout constraint returning an error in this case? (Swift)

我正在尝试将标签(progressTimer 标签)固定在我的滑块 (sliderDemo) 左侧 10 个单位处。我正在使用以下约束,但由于某种原因我的应用程序不断崩溃。我似乎找不到任何问题。任何帮助将不胜感激!

var constS1 = NSLayoutConstraint(item: progressTimerLabel, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: sliderDemo, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 10)
progressTimerLabel.addConstraint(constS1)

这是错误日志的一部分

The view hierarchy is not prepared for the constraint: <NSLayoutConstraint:0x79edb790 UILabel:0x79e74dd0'0:00'.right == UISlider:0x79e744f0.left + 10>

显然这有效:

var constS1 = NSLayoutConstraint(item: progressTimerLabel, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: sliderDemo, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 10)
sliderView.addConstraint(constS1)

希望对您有所帮助!

第一个版本不起作用的原因是您将约束添加到错误的视图。

它是这样工作的:

  • 如果您有宽度或高度限制,您可以将其添加到视图本身,它将起作用

  • 如果您有定义视图所有其他属性的约束,则需要将约束添加到父视图。这就是第二个选项起作用的原因,因为 sliderView 是标签和滑块的 superview

以防万一你以后有错误,所以你知道它为什么不起作用:)