iOS NSLayoutConstraint使用constraintWithItem修复宽度

时间:2014-12-29 00:15:10

标签: ios objective-c autolayout

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

5 个答案:

答案 0 :(得分:119)

找到我的解决方案。只需将另一个对象设置为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))

答案 1 :(得分:13)

如何使用Layout Anchors

lightness

答案 2 :(得分:9)

在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

答案 3 :(得分:5)

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

视觉格式: -

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

使用此代码进行约束,使用可视格式,其中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]];

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

答案 4 :(得分:0)

不是寻找明确的高度(28),更好的办法是寻找height约束......

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