web-dev-qa-db-fra.com

Ajuster la taille de la police du texte pour qu'elle tienne dans UIButton

Je veux m'assurer que le texte du bouton s'inscrit dans un UIButton, alors que le UIButton a une taille fixe. 

Bien sûr, je peux accéder au titreLabel de UIButton . Dans une étiquette, je définirais autoshrink sur une échelle de police minimale qui semble correspondre à 

self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;

, mais ne se comporte pas vraiment de la même façon, car cela permet au texte de s’adapter horizontalement aux limites, et non verticalement, sans changer la taille de la police.

Comment puis-je réellement ajuster la taille de police d'une étiquette par programmation pour que le texte tienne dans les limites de l'étiquette (comme indiqué dans Goal dans l'image ci-dessous)?

 adjustsFontSizeToFitWidth does not actually adjust the font size to fit the frame, only the width

J'ai déjà essayé 

self.myButton.titleLabel.numberOfLines = 0;
self.myButton.titleLabel.minimumScaleFactor = 0.5f;

sans succès, finissait toujours comme dans adjustsFontSizeToFitWidth sur le côté gauche de la photo ci-dessus.

Edit: La solution doit également être compatible avec iOS 7

31
MarkHim
self.mybutton.titleLabel.minimumScaleFactor = 0.5f;
self.mybutton.titleLabel.numberOfLines = 0;   <-- Or to desired number of lines
self.mybutton.titleLabel.adjustsFontSizeToFitWidth = YES;

... fait le tour, après layoutIfNeeded dans viewDidLoad Comme il se trouve, tous ceux-ci doivent être configurés pour ajuster la taille de la police, pas seulement pour l'adapter au cadre.

Mise à jour pour Swift 3:

mybutton.titleLabel?.minimumScaleFactor = 0.5
mybutton.titleLabel?.numberOfLines = 0   <-- Or to desired number of lines
mybutton.titleLabel?.adjustsFontSizeToFitWidth = true
72
MarkHim

Vous pouvez également définir un attribut d’exécution défini par l'utilisateur dans Interface Builder pour le bouton où: 

titleLabel.adjustsFontSizeToFitWidth = true
5
StackUnderflow

Code mis à jour pour Swift 3.0:

yourButton.titleLabel?.minimumScaleFactor = 0.5
yourButton.titleLabel?.numberOfLines = 0
yourButton.titleLabel?.adjustsFontSizeToFitWidth = true
5
CodeBender

Essayez d'appeler la méthode suivante.

button.titleLabel?.baselineAdjustment = UIBaselineAdjustment.AlignCenters
3
Jason Nam

essaye ça:

  [myButton setFont:[[myButton font] fontWithSize:--originalButtonFontSize]];
  textWidth = [text sizeWithFont:[myButton font]].width;

}
1
Wostein

Dans Xcode-> Ouvrir le storyboard-> Aller à l'attribut d'attributs-> Contrôle-> Alignement-> Choisir deuxième horizontalement et verticalement.

ou 

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
0
VJVJ