添加布局约束的优先级

时间:2013-03-12 15:27:45

标签: iphone ios objective-c autolayout

我在label中有buttonsuperView

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

但我不确定如何降低第二个约束的优先级。

1 个答案:

答案 0 :(得分:36)

您只需设置约束的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];