查看层次结构没有为约束做好准备

use*_*739 4 xcode objective-c ios swift

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))
}
Run Code Online (Sandbox Code Playgroud)

当调用上面的代码时,它崩溃并出现错误"视图层次结构没有为约束做好准备".我可以理解,如果我试图在将约束添加到视图之前添加约束但是插入视图然后跟随添加的约束,则会生成此错误.

有任何想法吗?

Ken*_*ses 9

需要将约束添加到所有相关视图的共同祖先(其中视图被视为其自身的祖先).self.blurView是一个子视图self.view.约束涉及self.blurViewself.view.因此,需要添加约束self.view,而不是self.blurView.

顺便说一句,你的线索应该是错误信息的这一部分(你没有引用,但你的相关联在这里):

添加到视图时,约束的项必须是该视图(或视图本身)的后代.