2012-10-08 16 views
5

Tengo UILabel A veces quiero centrarme verticalmente en una celda. Esto tiene que hacerse programáticamente. He intentado añadir la siguiente restricción para centrarla (LOCNAME es la UILabel):ios 6: Centre UILabel verticalmente usando las restricciones de diseño automático

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

Este es el resultado me sale:

enter image description here

Parece que su centrado, pero tal vez cambiando la altura de UILabel o algo?

Aquí está el controlador de vista de IB:

enter image description here

¿Cómo puedo lograr vertical, centrado mediante programación?

+0

¿Por qué esto tiene que hacerse programáticamente? ¿Por qué no puedes simplemente diseñar una celda diferente usando IB y secuestrar eso en lugar de este? – slf

+0

¡Gracias! Eso hará el truco para mi caso específico. ¿Qué harías si no estuviéramos lidiando con células? Digamos que solo estábamos tratando de centrar una etiqueta en un UIView genérico programáticamente. –

+0

Puede que esta no sea la mejor manera, pero probablemente calcule la altura y haga un poco de matemática para averiguar qué debe ser el CGRect del marco. – slf

Respuesta

0

intentan alcanzar la altura UIlabel después de centrarlo ???

o puede reasignar la ubicación de la etiqueta en su celda personalizada en forma programática.

3

Qué tal esto: Además de su restricción de centrado, agregue una restricción de altura para cell.locName para hacerlo más alto.

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

Probablemente esté golpeando las otras restricciones que ya existen en la celda. Agregar restricciones no hace que las demás restricciones desaparezcan: si tiene espacio entre las etiquetas superior e inferior, por ejemplo, para satisfacer esto y la nueva restricción de centrado, la altura de la etiqueta superior deberá reducirse.

Es posible que tenga que hacer tomas para estas otras limitaciones y eliminarlas para lograr el diseño centrado.

Cuestiones relacionadas