2013-03-12 2 views
16

Mam takie same ustawienia w postaci label i .Dodawanie priorytetu do ograniczeń układu

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

chciałbym mieć label być centred, jeśli to możliwe, to mają luki min do button i przesunąć w lewo.

Więc jeśli przycisk jest duży to wygląda ...

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

Tak, przycisk pozostaje tam, gdzie to jest i w tym samym rozmiarze. I są minimalne luki między elementami.

Mogę dodać ograniczenie centerX, ale nie mogę dać mu pierwszeństwa, więc pozostaje Required.

Jak mogę utworzyć tę sytuację? Robię cały układ automatyczny w kodzie.

Ograniczenia Obecnie mam to ...

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[_label]-(>[email protected])-[_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]]; 

Ale nie jestem pewien, w jaki sposób obniżyć priorytet drugiego ograniczeń.

Odpowiedz

35

Wystarczy ustawić właściwość przymusu priority, tak:

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]; 
+0

Oczywiście! Dzięki! Nie pomyślałem o stworzeniu obiektu przed jego dodaniem. Idealny! Rozumiem, dzięki! – Fogmeister