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