无法调试布局约束

时间:2015-09-27 13:01:24

标签: ios uiview uiviewanimation nslayoutconstraint

转换某些UIViews时,我的应用程序崩溃了,但我无法找到原因。我在Xcode的日志控制台中收到此错误:

  

2015-09-23 10:03:43.420我的应用程序[1510:528283]视图层次结构没有为约束准备:当添加到视图时,约束的项必须是该视图的后代(或视图本身) )。如果在组装视图层次结构之前需要解析约束,则会崩溃。打破 - [UIView(UIConstraintBasedLayout)_viewHierarchyUnpreparedForConstraint:]进行调试。

     

2015-09-23 10:03:43.421我的应用程序[1510:528283] ***断言失败 - [UIView _layoutEngine_didAddLayoutConstraint:roundingAdjustment:mutualExclusiveConstraints:],/ BuildRoot / Library / Cache / com.apple.xbs /源/的UIKit / UIKit的-3505.16 / NSLayoutConstraint_UIKitAdditions.m:590

我不知道如何调试这个,我不明白Break on -[UIView(UIConstraintBasedLayout) _viewHierarchyUnpreparedForConstraint:] to debug.。我没有在文档和任何例子中找到如何做到这一点,有人可以告诉我我该怎么办?

2 个答案:

答案 0 :(得分:2)

例如,当您在视图上添加约束并且视图本身尚未添加到另一个视图时,会发生这种情况。没有意义

override func viewDidLoad() {
  super.viewDidLoad

  let newView = setupCandyView()
  view.addSubview(newView)
}


func setupCandyView() -> UIView {
  let container = UIView()

  let button = UIButton()
  container.addSubview(button)

  // you are adding constarints here
  // but container isn't added to the view yet

  addConstraint(NSLayoutConstraint(item: button,
    attribute: .CenterY,
    relatedBy: .Equal,
    toItem: container,
    attribute: .CenterY,
    multiplier: 1.0,
    constant: 0))

  return container
}

只需添加符号断点即可捕获错误引发的位置。

Symbolic Breakpoint Example

答案 1 :(得分:0)

在视图之间添加约束时,两个视图必须位于同一层次结构中。

这意味着两个视图必须共享一个共同的超级视图。

检查您的约束代码以确保是这种情况。