2010-12-27 13 views
8

Tengo una matriz de UILabels dentro de contentView de una UITableViewCell personalizada. La fuente de cada etiqueta se clasifica por clasificación para formar una nube de etiquetas. En el método que pone en marcha la célula (fila), I iterar a través de la palabra objetos que caben en esa línea, la creación de la trama para cada UILabel como sigue:¿Hay alguna manera de alinear el fondo de UILabels con fuentes diferentes?

CGRect theFrame = CGRectMake(xPosAdjuster, 
    theWordRow.rowHeight - thisWord.lblHeight, 
    thisWord.lblWidth, 
    thisWord.lblHeight); 
UILabel *myLabel = [[UILabel alloc] initWithFrame:theFrame]; 

Esto consigue los marcos de las etiquetas alineadas (ver imagen a continuación), pero, desafortunadamente, las etiquetas tienen un relleno que es una función del tamaño de la fuente.

alt text

¿Hay alguna manera de eliminar el relleno (frontera) en un UILabel y/o calcular con exactitud para que pueda ajustar la posición y de los marcos en consecuencia?

Gracias

Respuesta

7

Es posible que desee echar un vistazo a this page. Hay información en los documentos de Apple, sin embargo, esta fue la primera que encontré.

Parece que tendrá que hacer algunos cálculos basados ​​en el descensor del UIFont. Puede obtener fácilmente este valor, se define como una propiedad en UIFont.

+0

Gracias. Eso es exactamente lo que necesitaba. – Bama91

+0

para aquellos que tienen problemas con el descensor, puede editar su archivo de fuente como se describe aquí: http://www.andyyardley.com/2012/04/24/custom-ios-fonts-and-how-to-fix -the-vertical-position-problem/ – YoCoh

10

Aquí está mi código final que se alinea las etiquetas:

CGRect theFrame = CGRectMake(xPosAdjuster, 
    floor(theWordRow.rowHeight - thisWord.lblHeight), 
    floor(thisWord.lblWidth), 
    thisWord.lblHeight); 
UILabel *myLabel = [[UILabel alloc] initWithFrame:theFrame]; 
... 
CGRect newFrame = myLabel.frame; 
newFrame.origin.y -= floor(myLabel.font.descender); 
myLabel.frame = newFrame; 

alt text

+0

Creo que debería ser: newFrame.origin.y + floor (myLabel.font.descender); –

Cuestiones relacionadas