【发布时间】:2016-06-09 15:52:55
【问题描述】:
我有一个名为loginView 的子视图,其中还有一些其他元素,即loginButton 和loginUsername
我正在尝试以编程方式添加一个 Facebook 登录按钮,该按钮具有相对于 loginButton、loginView 和 loginUsername 的约束
这是我的代码
self.loginView.addSubview(facebookLoginButton)
let facebookLoginButtonTopConstraint = NSLayoutConstraint(
item: facebookLoginButton,
attribute: NSLayoutAttribute.Top,
relatedBy: NSLayoutRelation.Equal,
toItem: loginButton,
attribute: NSLayoutAttribute.Bottom,
multiplier: 1,
constant: 8
)
let facebookLoginButtonLeadingConstraint = NSLayoutConstraint(
item: facebookLoginButton,
attribute: NSLayoutAttribute.Leading,
relatedBy: NSLayoutRelation.Equal,
toItem: loginView,
attribute: NSLayoutAttribute.Leading,
multiplier: 1,
constant: 8
)
let facebookLoginButtonWidthConstraint = NSLayoutConstraint(
item: facebookLoginButton,
attribute: NSLayoutAttribute.Width,
relatedBy: NSLayoutRelation.Equal,
toItem: loginUsername,
attribute: NSLayoutAttribute.Width,
multiplier: 1,
constant: 0
)
self.loginView.addConstraints([
facebookLoginButtonTopConstraint,
facebookLoginButtonLeadingConstraint
])
self.facebookLoginButton.addConstraint(facebookLoginButtonWidthConstraint)
这段代码在我的 viewDidLoad 方法中。我得到的错误是:
视图层次结构没有为约束做好准备: 添加到视图时,约束的项必须是该视图(或视图本身)的后代。如果在组装视图层次结构之前需要解决约束,这将崩溃。中断 -[UIView(UIConstraintBasedLayout) _viewHierarchyUnpreparedForConstraint:] 进行调试。
非常感谢任何帮助,谢谢!
【问题讨论】:
-
先添加
facebookLoginButton.translatesAutoresizingMaskIntoConstraints = false -
在我上面的所有代码(仍然在 viewDidLoad 方法中)失败之前添加这个并且仍然产生相同的错误。不过谢谢!
标签: ios swift facebook nslayoutconstraint