web-dev-qa-db-fra.com

Texte non centré verticalement dans UILabel

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: Label not centered

Dois-je faire quelque chose de spécifique pour pouvoir le centrer?

41
Loadex

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
84
rintaro

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

13
otiai10

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.

0
Pranav Kasetti

Swift 4.2

valueLabel.textAlignment = .center
0
ttorbik