wake-up-neo.com

Passen Sie die Schriftgröße des Texts an UIButton an

Ich möchte sicherstellen, dass der Schaltflächentext in einen UIButton passt, während der UIButton eine feste Größe hat. 

Natürlich kann ich auf das titleLabel des UIButton zugreifen. In einem Label würde ich autoshrink auf den minimalen Schriftgrad einstellen, der scheinbar entspricht 

self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;

, verhält sich jedoch nicht wirklich gleich, da der Text nur horizontal und nicht vertikal in die Begrenzungen passt, wodurch die Schriftgröße nicht geändert wird.

Wie kann ich die Schriftgröße eines Labels tatsächlich programmgesteuert anpassen, damit der Text in die Labelgrenzen passt (wie in Goal im Bild unten gezeigt)?

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

Ich habe es schon versucht 

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

ohne Erfolg endete es immer wie in adjustsFontSizeToFitWidth auf der linken Seite des obigen Bildes.

Edit: Die Lösung muss auch ios7-konform sein

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

... hat den Trick gemacht, nachdem layoutIfNeeded in viewDidLoad Wie sich herausgestellt hat, müssen alle diese Parameter so eingestellt werden, dass sie die Schriftgröße tatsächlich anpassen und nicht nur in den Rahmen passen.

Update für Swift 3:

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

Sie können im Interface Builder auch ein benutzerdefiniertes Laufzeitattribut für die Schaltfläche wo festlegen 

titleLabel.adjustsFontSizeToFitWidth = true
5
StackUnderflow

Aktualisierter Code für Swift 3.0:

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

Versuchen Sie die folgende Methode aufzurufen.

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

versuche dies:

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

}
1
Wostein

In Xcode-> Storyboard öffnen-> Gehe zu Attribute-Inspektor-> Steuerung-> Ausrichtung-> Wählen Sie die zweite in horizontaler und vertikaler Richtung.

oder 

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
0
VJVJ