转换某些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.
。我没有在文档和任何例子中找到如何做到这一点,有人可以告诉我我该怎么办?
答案 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
}
只需添加符号断点即可捕获错误引发的位置。
答案 1 :(得分:0)
在视图之间添加约束时,两个视图必须位于同一层次结构中。
这意味着两个视图必须共享一个共同的超级视图。
检查您的约束代码以确保是这种情况。