override func viewDidLoad() {
super.viewDidLoad()
self.blurView = UIVisualEffectView(effect: UIBlurEffect(style: .ExtraLight)) as UIVisualEffectView
self.view.insertSubview(self.blurView, belowSubview: self.filterPanel)
self.blurView.addConstraint(NSLayoutConstraint(item: self.blurView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0))
self.blurView.addConstraint(NSLayoutConstraint(item: self.blurView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 0))
self.blurView.addConstraint(NSLayoutConstraint(item: self.blurView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0))
self.blurView.addConstraint(NSLayoutConstraint(item: self.blurView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 0))
}
当调用上面的代码时,它崩溃并出现错误“视图层次结构没有为约束做好准备”。我可以理解,如果我在尝试添加约束之前添加约束,但是插入了视图,然后添加了约束,我就能理解这个错误。
有什么想法吗?
答案 0 :(得分:9)
需要将约束添加到所有相关视图的共同祖先(其中视图被视为其自身的祖先)。 self.blurView
是self.view
的子视图。约束涉及self.blurView
和self.view
。因此,需要将约束添加到self.view
,而不是self.blurView
。
顺便说一下,你的线索应该是错误信息的一部分(你没有引用,但你的关联做了here):
添加到视图时,约束的项必须是该视图的后代(或视图本身)。
答案 1 :(得分:0)
我自己有这个问题。 事实证明我应该在执行“addConstraints”之前完成“addSubview”。 订单撤消后,所有错误消息都消失了。