2013-03-12 13 views
16

Ho un label e button in un superView come questo.Aggiunta della priorità ai vincoli di layout

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

mi piacerebbe il label essere centred se possibile, quindi avere un minimo distacco dal button e spostare a sinistra.

Quindi, se il pulsante è grande sembra ...

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

Quindi, il pulsante rimane dov'è e, nello stesso formato. E ci sono spazi minimi tra gli elementi.

Posso aggiungere il vincolo centerX ma non riesco a dargli una priorità in modo che rimanga Required.

Come posso creare questa situazione? Sto facendo tutto il layout automatico nel codice.

I vincoli ho attualmente sono ...

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

Ma io non sono sicuro di come ridurre la priorità del secondo vincolo.

risposta

35

Basta impostare la proprietà priority del vincolo, in questo modo:

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

Certo! Grazie! Non pensavo di creare l'oggetto prima di aggiungerlo. Perfezionare! Ho risolto ora, grazie! – Fogmeister

Problemi correlati