iOS NSLayoutConstraint使用constraintWithItem修复宽度

Con*_*nor 42 objective-c ios autolayout

我想设置一个约束,以编程方式为UIButton提供固定(常量)宽度.我知道我可以使用constraintsWithVisualFormat来做到这一点,但我一直在使用constraintWithItem来处理代码中的所有约束.如果有任何方法可以使用constraintWithItem,我想知道好奇/一致性.

Con*_*nor 120

找到了解决方案.只需将另一个对象设置为nil,将另一个属性设置为NSLayoutAttributeNotAnAttribute(这是我没想到的)并使用常量参数作为固定宽度:

[self addConstraint:[NSLayoutConstraint constraintWithItem:myButton
      attribute:NSLayoutAttributeWidth 
      relatedBy:NSLayoutRelationEqual 
      toItem:nil 
      attribute:NSLayoutAttributeNotAnAttribute 
      multiplier:1.0 
      constant:200]];
Run Code Online (Sandbox Code Playgroud)

编辑:因为这个答案似乎仍然得到了相当多的观点,我想我会添加Swift语法:

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

  • 不要对自己太苛刻。这些东西很容易错过。 (2认同)

Luk*_*eau 17

如何使用布局锚点

myView.widthAnchor.constraintEqualToConstant(29).isActive = true
Run Code Online (Sandbox Code Playgroud)

  • 只需添加,现在将.active替换为.isActive (2认同)

Edu*_*ias 11

在快速:

let width = 120
let constraint = NSLayoutConstraint(
    item: myView,
    attribute: .width,
    relatedBy: .equal,
    toItem: nil,
    attribute: .notAnAttribute,
    multiplier: 1.0,
    constant: width)
NSLayoutConstraint.activateConstraints([constraint])
Run Code Online (Sandbox Code Playgroud)

然后,您可以更改约束的常量值

constraint.constant = width * 2
Run Code Online (Sandbox Code Playgroud)


小智 5

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

视觉格式:

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

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

ConstraintWithItem格式:-

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:myButton attribute: NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute: NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:50.0]];
Run Code Online (Sandbox Code Playgroud)

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