【问题标题】:Can't Add Constraints to Button Programatically - Swift 2.0无法以编程方式向按钮添加约束 - Swift 2.0
【发布时间】:2016-06-09 15:52:55
【问题描述】:

我有一个名为loginView 的子视图,其中还有一些其他元素,即loginButtonloginUsername

我正在尝试以编程方式添加一个 Facebook 登录按钮,该按钮具有相对于 loginButtonloginViewloginUsername 的约束

这是我的代码

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


【解决方案1】:

错误说明了一切。在添加约束之前,您需要将所有视图准备好层次结构。在添加约束之前检查所有四个视图是否都添加到视图层次结构中(您是否忘记了某些视图的addSubvew?)。 不要将此代码移动到viewWillLayoutSubviews 方法,这是错误提示!因为您不想多次添加约束。此外,您应该将facebookLoginButtonWidthConstraint 添加到同时拥有 (loginView?)、facebookLoginButtonloginUsername 的视图中,因为这是共享约束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2016-05-28
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多