2012-10-08 2 views
5

Ho un UILabel A volte voglio centrare verticalmente in una cella. Questo deve essere fatto a livello di programmazione. Ho provato ad aggiungere il seguente vincolo per centrarlo (LOCNAME è l'UILabel):ios 6: Centra UILabel verticalmente utilizzando i vincoli Auto Layout

[cell addConstraint:[NSLayoutConstraint constraintWithItem:cell 
attribute:NSLayoutAttributeCenterY relatedBy:0 toItem:cell.locName 
attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]]; 

Questo è il risultato che ottengo:

enter image description here

Sembra che la sua centratura, ma forse cambiando l'altezza dello UILabel o qualcosa del genere?

Ecco il controller della vista in IB:

enter image description here

Come posso ottenere verticale centraggio programatically?

+0

Perché questo deve essere fatto a livello di programmazione? Perché non puoi semplicemente progettare una cella diversa usando IB e sequester che invece di questa? – slf

+0

Grazie! Questo farà il trucco per il mio caso specifico. Cosa faresti se non avessimo a che fare con le cellule? Diciamo che stavamo solo cercando di centrare programmaticamente un'etichetta in un UIView generico? –

+0

Questo potrebbe non essere il modo migliore, ma probabilmente calcolerei l'altezza e fare un po 'di matematica per capire cosa dovrebbe essere il CGRect del frame. – slf

risposta

0

cercare di raggiungere l'altezza UIlabel dopo il centro ???

oppure è possibile riallocare la posizione dell'etichetta nella cella personalizzata in modo programmatico.

3

Che ne dite di questo: Oltre al vincolo di centraggio, aggiungere un vincolo di altezza per cell.locName per renderlo più alto.

[cell.contentView addConstraint: 
    [NSLayoutConstraint constraintWithItem:cell.locName 
           attribute:NSLayoutAttributeHeight 
           relatedBy:NSLayoutRelationGreaterThanOrEqual 
            toItem:nil 
           attribute:NSLayoutAttributeNotAnAttribute 
           multiplier:1 
            constant:20]]; 
2

Probabilmente stai colpendo gli altri vincoli già presenti nella cella. L'aggiunta di vincoli non elimina gli altri vincoli: se si dispone di una spaziatura tra le etichette superiore e inferiore, ad esempio, per soddisfare questo e il nuovo vincolo di centraggio, l'altezza dell'etichetta superiore dovrà ridursi.

Potrebbe essere necessario creare prese per questi altri vincoli e rimuoverli per ottenere il progetto centrato.