为什么忽略NSLayoutConstraints?

时间:2015-04-28 20:07:06

标签: ios nslayoutconstraint

我遇到了对iOS布局约束机制的误解。请参阅下面列出的viewDidLoad内的代码。

    var btn = UIButton()
    btn.setTitle("i am a button", forState: UIControlState.Normal)
    btn.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
    btn.backgroundColor = UIColor.lightGrayColor()
    btn.sizeToFit()

    view.addSubview(btn)

    view.addConstraint(
        NSLayoutConstraint(item: view,
            attribute: NSLayoutAttribute.CenterX,
            relatedBy: NSLayoutRelation.Equal,
            toItem: btn,
            attribute: NSLayoutAttribute.CenterX,
            multiplier: 1.0,
            constant: 0.0))

    view.addConstraint(
        NSLayoutConstraint(item: view,
            attribute: NSLayoutAttribute.CenterY,
            relatedBy: NSLayoutRelation.Equal,
            toItem: btn,
            attribute: NSLayoutAttribute.CenterY,
            multiplier: 1.0,
            constant: 0.0))

在我看来,我的意图很明确。我想在设备屏幕的中央看到一个按钮。但我只能看到以下图片。

iPhone 6 Simulator

我在项目控制台中有一个输出,因此我无法理解它的内容。

  

无法   同时满足约束。可能至少有一个   以下列表中的约束是您不想要的。试试这个:(1)   看看每个约束,并试着找出你不期望的;   (2)找到添加了不需要的约束或约束的代码   并修复它。 (注意:如果您正在看到   您不了解的NSAutoresizingMaskLayoutConstraints,请参阅   到UIView属性的文档   translatesAutoresizingMaskIntoConstraints)(       "&#34 ;,       "&#34 ;,       "&#34 ;,       "   (姓名:' |':UIWindow:0x7fd318551080)>" )

     

将尝试通过违反约束来恢复   

     

在UIViewAlertForUnsatisfiableConstraints处创建一个符号断点   在调试器中捕获它。方法中的   在UIView中列出的UIConstraintBasedLayoutDebugging类别    也可能有所帮助。 2015-04-28 23:46:04.516   ConsTest [5966:248434]无法同时满足约束条件。     可能至少下列列表中的一个约束是一个   你不想要。试试这个:(1)看看每个约束并尝试   找出你不期望的; (2)找到添加的代码   不需要的约束或约束并修复它。 (注意:如果您正在看到   您不了解的NSAutoresizingMaskLayoutConstraints,请参阅   到UIView属性的文档   translatesAutoresizingMaskIntoConstraints)(       "&#34 ;,       "&#34 ;,       "&#34 ;,       "   (姓名:' |':UIWindow:0x7fd318551080)>" )

     

将尝试通过违反约束来恢复   

     

在UIViewAlertForUnsatisfiableConstraints处创建一个符号断点   在调试器中捕获它。方法中的   在UIView中列出的UIConstraintBasedLayoutDebugging类别    也可能会有帮助。

看起来约束被视为矛盾,因而完全被忽略。我无法指出为什么我不能只创建一个按钮并以编程方式将其放在中心。任何相关的指示都非常感谢。

1 个答案:

答案 0 :(得分:4)

在您的UIButton(btn)上设置translatesAutoresizingMaskIntoConstraints = false

例如

btn.translatesAutoresizingMaskIntoConstraints = false

推荐阅读:Adopting Auto Layout