web-dev-qa-db-ja.com

レイアウト制約に優先順位を追加する

このようなlabelbuttonsuperViewがあります。

|--------------[Label]-----[button]-|

可能であればlabelcentredにしたいのですが、buttonとの間に最小のギャップを設けて、左に移動します。

したがって、ボタンが大きい場合は、次のようになります...

|-[        LABEL!        ]-[button]-|

そのため、ボタンは同じサイズのままです。そして、要素間には最小限のギャップがあります。

centerX制約を追加することはできますが、優先順位を付けることができないため、Requiredのままです。

どうすればこの状況を作り出すことができますか?私はすべての自動レイアウトをコードで行っています。

私が現在持っている制約は...

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[_label]-(>=8@1000)-[_button(==45)]-|"
                                                             options:NSLayoutFormatAlignAllCenterY
                                                             metrics:nil
                                                               views:views]];

[self addConstraint:[NSLayoutConstraint constraintWithItem:_label
                                                 attribute:NSLayoutAttributeCenterX
                                                 relatedBy:NSLayoutRelationEqual
                                                    toItem:self.contentView
                                                 attribute:NSLayoutAttributeCenterX
                                                multiplier:1.0
                                                  constant:0.0]];

しかし、2番目の制約の優先度を下げる方法がわかりません。

16
Fogmeister

次のように、制約のpriorityプロパティを設定するだけです。

NSLayoutConstraint *centeringConstraint = 
    [NSLayoutConstraint constraintWithItem:_label
                                 attribute:NSLayoutAttributeCenterX
                                 relatedBy:NSLayoutRelationEqual
                                    toItem:self.contentView
                                 attribute:NSLayoutAttributeCenterX
                                multiplier:1.0
                                  constant:0.0];

centeringConstraint.priority = 800; // <-- this line

[self addConstraint:centeringConstraint];
36
BJ Homer