Massimo Oliviero

I deliri digitali di un programmatore informatico e aspirante fotografo…
luglio 21st, 2011 by Massimo

iOS, allineamento verticale di una UILabel

La UILabel possiede una comoda proprietà Alignment che permette l’allineamento orizzontale del testo. Non esiste una proprietà per all’allineamento verticale. Anzi il testo risulterà sempre centrale rispetto all’altezza della label. Come fare allora? Beh possiamo utilizzare un semplice ma alquanto efficace snippet di codice che permette, con un trucchetto, di aggiustare la situazione a runtime:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
NSString *testo = @"Testo di prova";
UILabel *myLabel = self.label; // recupero in qualche modo la label
 
// Determina la dimensione reale del testo, calcolata
// in base al font utilizzato nella label e al line break mode.
CGSize labelSize = [testo sizeWithFont:myLabel.font
                    constrainedToSize:myLabel.frame.size
                    lineBreakMode:myLabel.lineBreakMode];
 
// ALLINEAMENTO VERSO l'ALTO
// Ridimensiona l'altezza della label
// in base all'altezza effettiva del testo.
CGRect frame = myLabel.frame;
frame.size.height = labelSize.height;
myLabel.frame = frame;

In questo caso l’allineamento del testo sarà verso l’alto. A questo punto è semplice giocare con i valori del frame per realizzare anche l’allineamento verso il basso. In questo modo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
NSString *testo = @"Testo di prova";
UILabel *myLabel = self.label; // recupero in qualche modo la label
 
// Determina la dimensione reale del testo, calcolata
// in base al font utilizzato nella label e al line break mode.
CGSize labelSize = [testo sizeWithFont:myLabel.font
                    constrainedToSize:myLabel.frame.size
                    lineBreakMode:myLabel.lineBreakMode];
 
// ALLINEAMENTO VERSO IL BASSO
CGFloat diff = myLabel.frame.size.height - labelSize.height;
CGRect frame = myLabel.frame;
frame.origin.y = frame.origin.y + diff;
frame.size.height = labelSize.height;
myLabel.frame = frame;

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">