J'ai créé une étiquette avec le code suivant:
func setupValueLabel() {
valueLabel.numberOfLines = 1
valueLabel.font = UIFont(name: "Avenir-Black", size: 50)
valueLabel.adjustsFontSizeToFitWidth = true
valueLabel.clipsToBounds = true
valueLabel.backgroundColor = UIColor.greenColor()
valueLabel.textColor = valuesColor
valueLabel.textAlignment = NSTextAlignment.Center
}
Je ne comprends pas vraiment pourquoi mais l'étiquette n'est pas centrée verticalement:
Dois-je faire quelque chose de spécifique pour pouvoir le centrer?
Le problème est que la taille de la police est réduite de adjustsFontSizeToFitWidth = true
, mais la lineHeight
n'est pas ajustée automatiquement. Il reste à être pour la taille de la police d'origine qui est 50
.
Par défaut, le texte est aligné sur sa ligne de base. vous pouvez l'ajuster avec baselineAdjustment
property.
Dans votre cas, vous devez le définir sur UIBaselineAdjustment.alignCenters
.
valueLabel.baselineAdjustment = .alignCenters
Grâce à @rintaro, cela fonctionne enfin.
Une dernière chose à propos de mon cas, cela n’a pas fonctionné parce que je mettais ByWordWrapping
. Je devais définir lineBreakMode
comme ByClipping
.
De même, si vous utilisez UILabel.attributedText
, vous pouvez utiliser sizeToFit
et ajouter des contraintes de centrage. Veillez simplement à ne pas définir la hauteur de ligne de texte attribuée avec une variable NSMutableParagraphStyle
.
Swift 4.2
valueLabel.textAlignment = .center