iOS NSLayoutConstraint使用constraintWithItem固定宽度

我想设置一个约束,以编程方式给UIButton一个固定的(常量)宽度。 我知道我可以用constraintsWithVisualFormat来做到这一点,但我一直在使用constraintWithItem代码中的所有约束。 我想知道为了好奇/一致性,如果有什么办法做到这一点与constraintWithItem。

find我的解决scheme 只要将其他对象设置为零,将另一个属性设置为NSLayoutAttributeNotAnAttribute(这是我没有想到的),并使用固定宽度的常量参数:

[self addConstraint:[NSLayoutConstraint constraintWithItem:myButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:200]]; 

编辑:因为这个答案似乎仍然得到公平的意见,我想我会添加Swift语法:

 self.addConstraint(NSLayoutConstraint( item: myButton, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 200)) 

如何使用布局锚 ?

 myView.widthAnchor.constraintEqualToConstant(29).active = true 

这是一个固定宽度的button的简单代码。

视觉格式: –

 [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H: [myButton(==50)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(myButton)]]; 

self.view是你的button的超级视图,myButton是你的button的名字,50是myButton的宽度。 您可以根据所需的约束来更改这些值。

constraintWithItem格式: –

 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:myButton attribute: NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute: NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:50.0]]; 

使用此代码约束使用constraintWithItem格式其中self.view是您的button的超级视图,myButton是您的button的名称,50是myButton的宽度。 您可以根据所需的约束来更改这些值。

在迅速:

 let width = 120 let constraint = NSLayoutConstraint( item: myView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: width) NSLayoutConstraint.activateConstraints([constraint]) 

然后你可以改变约束的常量值

 constraint.constant = width * 2 

而不是寻找一个明确的高度(28),一个更好的主意是寻找height约束…

 loginButton.constraints.first(where: { $0.firstAttribute == .height })?.constant = 40