您创建了一个Width less Than or Equal 150 约束。之所以有效,是因为按钮具有固有宽度,因此约束将其最大宽度限制为 150 pt。
但这会与您的边缘约束相冲突,因为他们想让按钮宽于 150 点。如果降低边缘约束的优先级,则宽度约束优先。边缘约束只有在不破坏宽度约束的情况下才会被满足。边缘约束并没有消失,它们仍然在按钮上声明一些“拉”,但它们不能声明它们的全部“力”。所以他们只是把它拉到150点的最大宽度。
这就是你的做法:
创建“常规”宽度约束,然后在边栏中编辑该约束,使其成为“小于或等于”约束。
接下来,您选择边缘约束并将其优先级降低到小于 1000。
你有一个按钮,它会增长到 150 点宽。
在代码中:
let button = UIButton()
button.setTranslatesAutoresizingMaskIntoConstraints(false)
button.backgroundColor = UIColor.redColor()
button.setTitle("Button", forState: .Normal)
view.addSubview(button)
let centerXConstraint = NSLayoutConstraint(item: button, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0)
view.addConstraint(centerXConstraint)
let centerYConstraint = NSLayoutConstraint(item: button, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: 0)
view.addConstraint(centerYConstraint)
let views = ["button" : button]
let horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("|-(100@999)-[button(<=150)]-(100@999)-|", options: nil, metrics: nil, views: views)
view.addConstraints(horizontalConstraints)
最后两行包含重要的约束。