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; |