So ändern Sie die Schriftart von UIButton mit Swift

207

Ich versuche, die Schriftart eines UIButton mit Swift zu ändern ...

myButton.font = UIFont(name: "...", 10)

Ist .fontjedoch veraltet und ich bin nicht sicher, wie ich die Schriftart anders ändern soll.

Irgendwelche Vorschläge?

Stephen Fox
quelle

Antworten:

421

Verwenden Sie titleLabelstattdessen. Die fontEigenschaft ist in iOS 3.0 veraltet. Es funktioniert auch nicht in Objective-C. titleLabelist das Etikett, auf dem der Titel angezeigt wird UIButton.

myButton.titleLabel?.font =  UIFont(name: YourfontName, size: 20)

Beim Festlegen von Titeltext sollten Sie jedoch nur verwenden setTitle:forControlState:. Verwenden Sie diese Option nicht titleLabel, um Text direkt für den Titel festzulegen.

Codester
quelle
1
Weißt du, warum ich auspacken muss? mein Label? so ... myButton.titleLabel! .font = ...
DanMoore
Dies titleLabelist eine optionale Eigenschaft. Vielen Dank, dass dies zuvor in der Beta nicht der Fall war.
Codester
4
Mit dieser Methode konnte ich meinen Schriftnamen / Stil ändern, aber das Ändern der Eigenschaft size machte keinen Unterschied.
Dave G
7
Sie müssen das Etikett nicht zwangsweise auspacken. myButton.titleLabel?.font = ...wird seit funktionieren , wenn Titlelabel Null ist es nur einen no-op sein wird
teradyl
1
Warum funktioniert diese Methode nicht für benutzerdefinierte UIbutton-Unterklassen?
Munib
69

Für Swift 3.0 :

button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 16)

Dabei können "boldSystemFont" und "16" durch Ihre benutzerdefinierte Schriftart und Größe ersetzt werden.

ruthless_g
quelle
44

Die Punktnotation ist fantastisch (schnell 4.2) 👌

btn.titleLabel?.font = .systemFont(ofSize: 12)
Eonist
quelle
@mahasam UIFont wird abgeleitet, diese Antwort ist die gleiche wie die anderen, aber nur ohne UIFont (aber weil es vom Compiler abgeleitet wird, aber es ist das gleiche) PD: Ich versuche immer, auf diese Weise zu schreiben, aber nur um Sie zu lassen weiß, dass das das gleiche ist
Pablo Sanchez Gomez
1
@ Mahasam: "Punktnotation" ist das gleiche wie abgeleitet. Und ja, es ist eine gute Angewohnheit, sich zu verabschieden. Und es sind nicht die gleichen Antworten wie bei anderen, da es prägnanter ist als andere Antworten. IMO
Eonist
9

Sie müssen das titleLabel nicht zwangsweise auspacken, um es festzulegen.

myButton.titleLabel?.font = UIFont(name: YourfontName, size: 20)

Da Sie das titleLabel hier nicht verwenden, können Sie es optional verwenden. Wenn es gleich Null ist, ist es nur ein No-Op.

Ich werde auch hinzufügen, wie andere Leute sagen, dass die Schriftart-Eigenschaft veraltet ist, und stellen Sie sicher, dass Sie sie setTitle:forControlState:beim Festlegen des Titeltextes verwenden.

Teradyl
quelle
7

Aus der Dokumentation :

Die Schriftart, mit der Text auf der Schaltfläche angezeigt wird. ( In iOS 3.0 veraltet . Verwenden Sie stattdessen die fontEigenschaft von titleLabel.)

zneak
quelle
5

Wenn Sie Probleme mit der Schriftgröße haben (Ihre Schrift reagiert nicht auf Größenänderungen) ...

@codester hat den richtigen Code:

myButton.titleLabel!.font =  UIFont(name: YourfontName, size: 20)

Meine Schriftgröße änderte sich jedoch nicht. Es stellt sich heraus, dass ich nach einer nicht existierenden Schriftart frage ("HelveticaNeue-Regular"). Es verursachte keinen Absturz, schien diese Schriftanweisung jedoch nur zu ignorieren. Nachdem ich die Schriftart in eine vorhandene Schriftart geändert hatte, wurden Änderungen an "size: x" gerendert.

Dave G.
quelle
5

Wir können verschiedene Arten von Systemschriftarten wie unten verwenden

myButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17)
myButton.titleLabel?.font = UIFont.italicSystemFont(ofSize:UIFont.smallSystemFontSize)
myButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: UIFont.buttonFontSize)

und Ihre benutzerdefinierte Schriftart wie unten

    myButton.titleLabel?.font = UIFont(name: "Helvetica", size:12)
Sultan Ali
quelle
4

Sie sollten durch das titleLabelGrundstück gehen.

button.titleLabel.font

Die fontEigenschaft ist seit iOS 3.0 veraltet.

Chris Wagner
quelle
4

Schauen Sie hier .

Sie sollten stattdessen die Schriftart des titleLabel der Schaltfläche festlegen.

myButton.titleLabel!.font = UIFont(name: "...", 10)
Connor
quelle
4

Dies funktioniert in Swift 3.0:

btn.titleLabel?.font = UIFont(name:"Times New Roman", size: 20) 
RAM
quelle
4

Wenn Sie AttributedString auf den UIButton setzen, können Sie Folgendes tun.

let attributedText = NSAttributedString(string: "Hello", attributes: [NSAttributedStringKey.font: UIFont(name: "Calibri", size: 19)])
okayButton.setAttributedTitle(attributedText, for: .normal)
Anirudha Mahale
quelle
4

Wenn Sie nur die Größe ändern müssen ( Swift 4.0 ):

button.titleLabel?.font = button.titleLabel?.font.withSize(12)
Karbaman
quelle
2

Beispiel: button.titleLabel?.font = UIFont(name: "HelveticaNeue-Bold", size: 12)

  • Wenn Sie eine Standardschrift aus der eigenen Familie verwenden möchten, verwenden Sie beispielsweise: "HelveticaNeue"
  • Wenn Sie eine Familienschrift angeben möchten, verwenden Sie beispielsweise: "HelveticaNeue-Bold"
janaz
quelle
1

Dieser Weg funktioniert jetzt nicht:

 btn.titleLabel?.font = UIFont(name: "Helvetica", size:12)

Das funktioniert:

 btn.titleLabel?.font = UIFont.init(name: "Helvetica", size:12)
RealNmae
quelle
0

diese Arbeit für mich, danke. Ich möchte nur die Textgröße ändern, nicht den Schriftnamen.

var fontSizeButtonBig:Int = 30

btnMenu9.titleLabel? .font = .systemFont (ofSize: CGFloat (fontSizeButtonBig))

Mahasam
quelle