iOS NSLayoutConstraint Fixed Width using constraintWithItem



我想设置一个约束,以编程方式为 UIButton 提供固定(恒定)宽度。我知道我可以使用 constraintWithVisualFormat 来做到这一点,但我一直在代码中的所有约束中使用 constraintWithItem 来做。我想知道出于好奇心/一致性,是否有任何方法可以使用约束与项目来做到这一点。

找到了我的解决方案。只需将另一个对象设置为 nil,将另一个属性设置为 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).isActive = true

在 swift 中:

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

这是固定宽度按钮的简单代码。

视觉格式:-

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

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

约束项格式:-

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

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

与其寻找明确的高度 (28),更好的主意是寻找height约束......

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

最新更新