Como alterar a fonte do UIButton com o Swift

207

Estou tentando alterar a fonte de um UIButton usando Swift ...

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

No entanto, .fontestá obsoleto e não sei como alterar a fonte de outra forma.

Alguma sugestão?

Stephen Fox
fonte

Respostas:

421

Use em titleLabelvez disso. A fontpropriedade está obsoleta no iOS 3.0. Também não funciona no Objective-C. titleLabelé o rótulo usado para exibir o título UIButton.

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

No entanto, ao definir o texto do título, você deve usar apenas setTitle:forControlState:. Não use titleLabelpara definir nenhum texto para o título diretamente.

codester
fonte
1
Vocês sabem por que eu tenho que 'desembrulhar'? minha gravadora ?? ! assim ... myButton.titleLabel .font = ...
DanMoore
beacause titleLabelé uma propriedade opcional.Obrigado anteriormente na versão beta, não era.
codester
4
Esse método me permitiu alterar meu nome / estilo de fonte, mas alterar a propriedade size não fez nenhuma diferença.
Dave G
7
Você não precisa forçar a desembrulhar o rótulo. myButton.titleLabel?.font = ...vai funcionar, pois se titleLabel é nulo será apenas um não-op
teradyl
1
Por que esse método não funciona para a subclasse UIbutton personalizada?
Munib
69

Para o Swift 3.0 :

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

onde "boldSystemFont" e "16" podem ser substituídos por sua fonte e tamanho personalizados.

ruthless_g
fonte
44

A notação de pontos é impressionante (rápido 4,2) 👌

btn.titleLabel?.font = .systemFont(ofSize: 12)
eonista
fonte
@mahasam UIFont é inferido, esta resposta é a mesma que as outras, mas apenas sem o UIFont (mas porque é inferido pelo compilador, mas é o mesmo) PD: Eu sempre tento escrever dessa maneira, mas apenas para permitir que você sei que é o mesmo #
Pablo Sanchez Gomez
1
@ Mahasam: "Notação de ponto" é o mesmo que inferido. E sim, é um bom hábito a adotar. E não são as mesmas respostas que os outros, mas são mais sucintas que outras respostas. IMO
eonist 19/10/19
9

Você não precisa forçar a desembrulhar o titleLabel para defini-lo.

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

Como você não está usando o titleLabel aqui, é possível usá-lo opcionalmente e, se for nulo, será apenas um não operacional.

Também adicionarei, como outras pessoas estão dizendo, que a propriedade da fonte foi descontinuada e certifique-se de usá-la setTitle:forControlState:ao definir o texto do título.

teradil
fonte
7

A partir da documentação :

A fonte usada para exibir o texto no botão. ( Descontinuado no iOS 3.0 . Use a fontpropriedade do titleLabellugar.)

zneak
fonte
5

Se você estiver com problemas de tamanho da fonte (sua fonte não está respondendo a alterações de tamanho) ...

@codester tem o código certo:

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

No entanto, o tamanho da minha fonte não estava mudando. Acontece que eu pedi uma fonte que não existia ("HelveticaNeue-Regular"). Não estava causando um acidente, mas parecia estar apenas ignorando a declaração da fonte por causa disso. Depois que eu mudei a fonte para algo que existe, as alterações para "size: x" renderizaram.

Dave G
fonte
5

podemos usar diferentes tipos de fontes do sistema, como abaixo

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

e sua fonte personalizada como abaixo

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

Você deve passar pela titleLabelpropriedade.

button.titleLabel.font

A fontpropriedade foi descontinuada desde o iOS 3.0.

Chris Wagner
fonte
4

Dê uma olhada aqui .

Você deve definir a fonte do titleLabel do botão.

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

Isso funciona no Swift 3.0:

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

Se você estiver definindo AttributedString como UIButton, poderá fazer o seguinte.

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

Se você precisar alterar apenas o tamanho ( Swift 4.0 ):

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

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

  • Se você deseja usar a fonte padrão da sua própria família, use, por exemplo: "HelveticaNeue"
  • Se você deseja especificar a fonte da família, use, por exemplo: "HelveticaNeue-Bold"
janaz
fonte
1

Desta forma, não funciona agora:

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

Isso funciona:

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

este trabalho para mim, obrigado. Quero alterar o tamanho do texto apenas não alterar o nome da fonte.

var fontSizeButtonBig:Int = 30

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

mahasam
fonte