web-dev-qa-db-ja.com

constraintWithItemを使用したiOS NSLayoutConstraint Fixed Width

UIButtonに固定(一定)幅をプログラムで与えるための制約を設定したいと思います。 constraintWithVisualFormatを使用してこれを実行できることは知っていますが、コード内のすべての制約にconstraintWithItemを使用しています。 constraintWithItemを使用してこれを行う方法があれば、好奇心/一貫性のために疑問に思いました。

41
Connor

私の解決策を見つけました。他のオブジェクトを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))
119
Connor

レイアウトアンカー を使用してはどうですか?

myView.widthAnchor.constraintEqualToConstant(29).isActive = true
15
Lukas Batteau

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
10
Eduardo Irias

固定幅のボタンの簡単なコードを次に示します。

視覚形式:-

[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]];

Self.viewがボタンのスーパービュー、myButtonがボタンの名前、50がmyButtonの幅であるconstraintWithItem形式を使用して、このコードを制約に使用します。目的の制約を取得するために、これらの値を変更できます。

5
Tejvansh

明示的な高さ(28)を探すよりも、height制約を探す方が良いでしょう…

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