为什么在这种情况下我的布局约束会返回错误? (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
。
以防万一你以后有错误,所以你知道它为什么不起作用:)
我正在尝试将标签(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
。
以防万一你以后有错误,所以你知道它为什么不起作用:)