UIButtonに固定(一定)幅をプログラムで与えるための制約を設定したいと思います。 constraintWithVisualFormatを使用してこれを実行できることは知っていますが、コード内のすべての制約にconstraintWithItemを使用しています。 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の幅である視覚形式を使用した制約にこのコードを使用します。目的の制約を取得するために、これらの値を変更できます。
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形式を使用して、このコードを制約に使用します。目的の制約を取得するために、これらの値を変更できます。
明示的な高さ(28)を探すよりも、height
制約を探す方が良いでしょう…
loginButton.constraints.first(where: { $0.firstAttribute == .height })?.constant = 40