我正在经历对iOS布局约束机制的误解。请参阅下面列出的viewDidLoad
中的代码。为什么忽略NSLayoutConstraints?
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))
在我看来,我的意图很明确。我想在设备屏幕的中心看到一个按钮。但我只能看到下面的图片。
而且我有项目的控制台太吓人输出我不能从中明白的事情。
无法让 同时满足约束。以下列表中的至少一个 约束可能是您不想要的约束之一。试试这个:(1) 看看每个约束,并试图找出你不期望的; (2)找到添加了不需要的约束或约束的代码并对其进行修复。 (注意:如果你看到 NSAutoresizingMaskLayoutConstraints,你不明白,请参阅 到文档中的UIView财产 translatesAutoresizingMaskIntoConstraints)( “”, “”, “”, “ (名称:“| “:一个UIWindow:0x7fd318551080)>”)
将尝试打破约束
请在UIViewAlertForUnsatisfiableConstraints 一个象征性的断点赶上这在调试器来恢复。 中列出的UIView的UIConstraintBasedLayoutDebugging类别中的方法也可能有所帮助。 2015-04-28 23:46:04.516 ConsTest [5966:248434]无法同时满足约束条件。 以下列表中的至少一个约束可能是您不需要的一个 。尝试这一点:(1)看看每个约束,并尝试找出你不期望的 ; (2)找到添加了不想要的约束或约束并修复它的代码。 (注意:如果你看到 NSAutoresizingMaskLayoutConstraints,你不明白,请参阅 到文档中的UIView财产 translatesAutoresizingMaskIntoConstraints)( “”, “”, “”, “ (名称:“| “:一个UIWindow:0x7fd318551080)>”)
将尝试打破约束
请在UIViewAlertForUnsatisfiableConstraints 一个象征性的断点赶上这在调试器来恢复。 中列出的UIView的UIConstraintBasedLayoutDebugging类别中的方法也可能有所帮助。
看起来像约束处理矛盾,因此被忽略。我无法指出为什么我不能创建一个按钮并将其置于编程的中心。任何相关的指令非常感谢。
我不知道这是否是问题,你有没有试过在约束参数反转视图参数的命令?第一个应该是约束组合中的左视图。 –
@TiagoMaria在[NSLayoutConstraint类参考](https://developer.apple.com/library/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/)中说过,约束是等式(而不是赋值运算符)意味着你可以根据需要切换等式中的项目顺序。所以,不,参数顺序的反转没有任何结果。 –