2010-12-27 8 views
8

Ho una matrice di UILabels all'interno del contentView di un UITableViewCell personalizzato. Il carattere di ciascuna etichetta viene ridimensionato in base alla classifica per formare una nuvola di tag. Nel metodo che imposta la cella (riga), che iterazioni sugli oggetti parola che si inserisce su quella linea, impostare il telaio per ogni UILabel come segue:Un modo per allineare in basso UILabels con caratteri diversi?

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

Questo ottiene le cornici delle etichette allineate (vedi immagine sotto), ma sfortunatamente le etichette hanno una spaziatura che è una funzione della dimensione del carattere.

alt text

C'è un modo per rimuovere il padding (confine) su un UILabel e/o calcolare esattamente in modo da poter regolare la y pos dei telai di conseguenza?

Grazie

risposta

7

Si consiglia di dare un'occhiata a this page. Ci sono informazioni su Apple's Docs, tuttavia questo è stato il primo che ho trovato.

Quindi sembra che dovrete fare qualche calcolo basato sulla discendenza dello UIFont. Puoi facilmente ottenere questo valore, è definito come una proprietà su UIFont.

+0

Grazie. Questo è esattamente ciò di cui avevo bisogno. – Bama91

+0

per quelli di voi che hanno problemi con il discensore, è possibile modificare il file del carattere come descritto qui: http://www.andyyardley.com/2012/04/24/custom-ios-fonts-and-how-to-fix -the-vertical-position-problem/ – YoCoh

10

Ecco il mio codice finale che allinea le etichette:

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

Penso che dovrebbe essere: newFrame.origin.y + = floor (myLabel.font.descender); –

Problemi correlati