查看未准备约束的层次结构

时间:2015-02-15 18:19:03

标签: ios objective-c xcode 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))
}

当调用上面的代码时,它崩溃并出现错误“视图层次结构没有为约束做好准备”。我可以理解,如果我在尝试添加约束之前添加约束,但是插入了视图,然后添加了约束,我就能理解这个错误。

有什么想法吗?

2 个答案:

答案 0 :(得分:9)

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

顺便说一下,你的线索应该是错误信息的一部分(你没有引用,但你的关联做了here):

  

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

答案 1 :(得分:0)

我自己有这个问题。 事实证明我应该在执行“addConstraints”之前完成“addSubview”。 订单撤消后,所有错误消息都消失了。

相关问题