Добавление приоритета к ограничениям макета

У меня label и button в таком superView.

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

Я бы хотел, чтобы label был centred, если возможно, затем имел минимальный разрыв до 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]];

Но я не уверен, как снизить приоритет второго ограничения.


person Fogmeister    schedule 12.03.2013    source источник


Ответы (1)


Вы просто устанавливаете свойство 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];
person BJ Homer    schedule 12.03.2013
comment
Конечно! Спасибо! Я не думал создавать объект перед его добавлением. Идеально! Теперь все разобрано, спасибо! - person Fogmeister; 12.03.2013