Comment changer la police de UIButton avec Swift

207

J'essaie de changer la police d'un UIButton en utilisant Swift ...

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

toutefois .font est obsolète et je ne sais pas comment changer la police sinon.

Aucune suggestion?

Stephen Fox
la source

Réponses:

421

Utilisez titleLabelplutôt. La fontpropriété est obsolète dans iOS 3.0. Il ne fonctionne pas non plus dans Objective-C. titleLabelest l'étiquette utilisée pour afficher le titre UIButton.

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

Cependant, lors de la définition du texte du titre, vous ne devez utiliser que setTitle:forControlState:. Ne pas utiliser titleLabelpour définir directement du texte pour le titre.

codester
la source
1
Savez-vous pourquoi je dois «déballer»? mon étiquette ?? comme ceci ... myButton.titleLabel! .font = ...
DanMoore
beacause titleLabelest une propriété facultative, ce qui n'était pas le cas auparavant en version bêta.
codester
4
Cette méthode m'a permis de changer le nom / style de ma police, mais changer la propriété size n'a fait aucune différence.
Dave G
7
Vous n'avez pas besoin de forcer le déballage de l'étiquette. myButton.titleLabel?.font = ...fonctionnera puisque si titleLabel est nul, ce sera juste un no-op
teradyl
1
Pourquoi cette méthode ne fonctionne-t-elle pas pour la sous-classe UIbutton personnalisée?
Munib
69

Pour Swift 3.0 :

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

où "boldSystemFont" et "16" peuvent être remplacés par votre police et taille personnalisées.

ruthless_g
la source
44

La notation par points est impressionnante (Swift 4.2) 👌

btn.titleLabel?.font = .systemFont(ofSize: 12)
éoniste
la source
@mahasam UIFont est inféré, cette réponse est la même que les autres mais juste sans UIFont (mais parce qu'elle est inférée par le compilateur, mais c'est la même) PD: J'essaie toujours d'écrire de cette façon, mais juste pour vous laisser sais que c'est la même chose
Pablo Sanchez Gomez
1
@mahasam: "Dot-notation" est la même que celle déduite. Et oui c'est une bonne habitude à adopter. Et ce ne sont pas les mêmes réponses que les autres car elles sont plus succinctes que les autres réponses. IMO
eonist
9

Vous n'avez pas besoin de forcer le déballage du titleLabel pour le définir.

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

Puisque vous n'utilisez pas le titleLabel ici, vous pouvez simplement l'utiliser en option et s'il est nul, ce sera juste un no-op.

J'ajouterai également, comme d'autres personnes le disent, la propriété de la police est obsolète et je m'assurerai de l'utiliser setTitle:forControlState:lors de la définition du texte du titre.

teradyl
la source
7

De la documentation :

La police utilisée pour afficher le texte sur le bouton. ( Déconseillé dans iOS 3.0 . Utilisez plutôt la fontpropriété de titleLabel.)

zneak
la source
5

Si vous rencontrez des problèmes de taille de police (votre police ne répond pas aux changements de taille) ...

@codester a le bon code:

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

Cependant, ma taille de police ne changeait pas. Il s'avère que je demande une police qui n'existait pas ("HelveticaNeue-Regular"). Cela ne provoquait pas de plantage, mais semblait ignorer cette déclaration de police à cause de cela. Une fois que j'ai changé la police en quelque chose qui existe, les modifications apportées à "size: x" sont restées.

Dave G
la source
5

nous pouvons utiliser différents types de polices système comme ci-dessous

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

et votre police personnalisée comme ci-dessous

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

Vous devez passer par la titleLabelpropriété.

button.titleLabel.font

La fontpropriété est obsolète depuis iOS 3.0.

Chris Wagner
la source
4

Jetez un oeil ici .

Vous devez plutôt définir la police de titleLabel du bouton.

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

Cela fonctionne dans Swift 3.0:

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

Si vous définissez AttributedString sur le UIButton, vous pouvez faire la chose ci-dessous.

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

Si vous devez modifier uniquement la taille ( Swift 4.0 ):

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

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

  • Si vous souhaitez utiliser la police par défaut de sa propre famille, utilisez par exemple: "HelveticaNeue"
  • Si vous souhaitez spécifier la police de la famille, utilisez par exemple: "HelveticaNeue-Bold"
janaz
la source
1

Cette façon ne fonctionne pas maintenant:

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

Cela marche:

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

ce travail pour moi, merci. Je veux seulement changer la taille du texte sans changer le nom de la police.

var fontSizeButtonBig:Int = 30

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

mahasam
la source