web-dev-qa-db-fra.com

Le texte de l'étiquette UIButton est coupé

J'ai un UIButton construit dans Interface Builder qui a une étiquette par défaut. Dans Xcode, je change dynamiquement le texte de l'étiquette comme ceci:

myButton.titleLabel.text = @"this is the new label";

Cependant, lorsque le texte est mis à jour, la nouvelle chaîne est découpée à la même taille que la chaîne d'origine et finit par ressembler à:

this...label

Quelquun sait pourquoi cela se passe?

39
thenameisnick

Vous devez utiliser setTitle: forState: pour changer le titre d'un UIButton. Si vous modifiez le titre vous-même, le bouton n'a aucune indication qu'il doit redimensionner l'étiquette - vous finirez par devoir faire quelque chose comme ceci:

myButton.titleLabel.text = @"this is the new label";
[myButton setNeedsLayout];

mais je ne suis même pas sûr que cela fonctionnerait dans tous les cas. Des méthodes comme setTitle:forState: sont fournis pour que vous puissiez fournir des titres pour plusieurs états sans avoir à mettre à jour le bouton manuellement, et pour que le bouton sache qu'il doit être présenté avec un nouveau titre.

65

Essayez d'utiliser la méthode setTitle du bouton (plutôt que de définir le titre directement sur l'étiquette). Cela devrait obliger le titre à être redimensionné.

Objectif c:

[myButton setTitle:@"This is the text" forState:UIControlStateNormal];

Ou en Swift:

myButton.setTitle("This is the text", for: .normal)
31
Ian

Une autre solution consiste à laisser l'UILabel interne de l'UIButton réduire la taille de la police, comme peuvent le faire les UILabels:

button.titlelabel.minimumFontSize = 8.0; // or some more adequate size
self.buttonWithLongTitle.titleLabel.adjustsFontSizeToFitWidth = YES;
21

Appelez sizeToFit sur votre bouton. Cela redimensionnera le bouton pour l'adapter au texte.

8
Jasarien

Si cela ne fonctionne pas, vous pouvez toujours déterminer la taille de la chaîne et ajuster la largeur du cadre du bouton. Dans ce cas, vous êtes sûr qu'il conviendra.

// Calculate the size 
CGSize buttonSize = [@"My text.." sizeWithFont:[UIFont systemFontOfSize:15.0]
                    constrainedToSize:someSize lineBreakMode:UILineBreakModeWordWrap];

// Do whatever you want with the "buttonSize", you can for example adjust your button's frame width
1
0x8b4df00d

Solution dans Swift 4.2

yourButton.titleLabel?.minimumScaleFactor = 0.5 //set whatever you want here to scale
yourButton.titleLabel?.adjustsFontSizeToFitWidth = true

Solution pour Objectif C

[yourButton.titleLabel setMinimumScaleFactor:0.5];
[yourButton.titleLabel setAdjustsFontSizeToFitWidth:YES];
0
iOS Lifee