Jak zmienić czcionkę UIButton za pomocą Swift

207

Próbuję zmienić czcionkę UIButton za pomocą Swift ...

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

.fontJest to jednak przestarzałe i nie jestem pewien, jak inaczej zmienić czcionkę.

Jakieś sugestie?

Stephen Fox
źródło

Odpowiedzi:

421

Użyj titleLabelzamiast tego. fontNieruchomość jest przestarzałe w iOS 3.0. Nie działa również w Objective-C. titleLabelto etykieta używana do wyświetlania tytułu UIButton.

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

Jednak podczas ustawiania tekstu tytułu należy używać tylko setTitle:forControlState:. Nie używaj titleLabeldo bezpośredniego ustawiania tekstu tytułu.

koderz
źródło
1
Czy wiecie, dlaczego muszę „rozpakować”? moja etykieta? jak ten ... myButton.titleLabel! .font = ...
DanMoore
ponieważ titleLabeljest to opcjonalna właściwość, ale wcześniej nie była w wersji beta.
koderz
4
Ta metoda pozwoliła mi zmienić nazwę / styl czcionki, ale zmiana właściwości size nie miała znaczenia.
Dave G
7
Nie musisz wymuszać rozpakowywania etykiety. myButton.titleLabel?.font = ...zadziała, ponieważ jeśli titleLabel jest zerowy, będzie to po prostu zakaz
teradyl
1
Dlaczego ta metoda nie działa w przypadku niestandardowej podklasy UIbutton?
Munib
69

W przypadku Swift 3.0 :

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

gdzie „boldSystemFont” i „16” można zastąpić niestandardową czcionką i rozmiarem.

ruthless_g
źródło
44

Notacja punktowa jest niesamowita (szybkie 4.2) 👌

btn.titleLabel?.font = .systemFont(ofSize: 12)
eonista
źródło
@mahasam UIFont jest wywnioskowany, ta odpowiedź jest taka sama jak inne, ale tylko bez UIFont (ale ponieważ jest ona wywnioskowana przez kompilator, ale jest taka sama) PD: Zawsze staram się pisać w ten sposób, ale po prostu pozwalam ci wiedz, że to samo
Pablo Sanchez Gomez
1
@mahasam: „Zapis punktowy” jest taki sam jak wywnioskowany. I tak Jest to dobry nawyk do adopcji. I nie są to te same odpowiedzi, co inne, ponieważ są bardziej zwięzłe niż inne odpowiedzi. IMO
eonista
9

Nie musisz wymuszać rozpakowywania titleLabel, aby go ustawić.

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

Ponieważ nie używasz tytułu titleLabel, możesz go opcjonalnie użyć, a jeśli jest zero, będzie to po prostu niemożliwe.

Dodam również, jak mówią inni, właściwość czcionki jest przestarzała i upewnij się, że używasz jej setTitle:forControlState:podczas ustawiania tekstu tytułu.

teradyl
źródło
7

Z dokumentacji :

Czcionka używana do wyświetlania tekstu na przycisku. ( Przestarzałe w iOS 3.0 . Zamiast tego użyj fontwłaściwości titleLabel).

skradać się
źródło
5

Jeśli masz problemy z rozmiarem czcionki (czcionka nie reaguje na zmiany rozmiaru) ...

@codester ma odpowiedni kod:

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

Jednak mój rozmiar czcionki się nie zmieniał. Okazuje się, że pytam o czcionkę, która nie istnieje („HelveticaNeue-Regular”). Nie spowodowało to awarii, ale z tego powodu wydawało się, że po prostu ignoruje tę czcionkę. Gdy zmieniłem czcionkę na coś, co istnieje, renderowano zmiany na „size: x”.

Dave G.
źródło
5

możemy używać różnych rodzajów czcionek systemowych, takich jak poniżej

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

i niestandardową czcionkę, jak poniżej

    myButton.titleLabel?.font = UIFont(name: "Helvetica", size:12)
Sultan Ali
źródło
4

Powinieneś przejść przez titleLabelnieruchomość.

button.titleLabel.font

Ta fontwłaściwość jest przestarzała od iOS 3.0.

Chris Wagner
źródło
4

Spójrz tutaj .

Zamiast tego należy ustawić czcionkę tytułu titleLabel.

myButton.titleLabel!.font = UIFont(name: "...", 10)
Connor
źródło
4

Działa to w Swift 3.0:

btn.titleLabel?.font = UIFont(name:"Times New Roman", size: 20) 
Baran
źródło
4

Jeśli ustawiasz atrybut AttributeString na UIButton, możesz wykonać następujące czynności.

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

Jeśli chcesz zmienić tylko rozmiar ( Swift 4.0 ):

button.titleLabel?.font = button.titleLabel?.font.withSize(12)
Karbaman
źródło
2

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

  • Jeśli chcesz użyć domyślnej czcionki z własnej rodziny, użyj na przykład: „HelveticaNeue”
  • Jeśli chcesz określić czcionkę rodzinną, użyj na przykład: „HelveticaNeue-Bold”
janaz
źródło
1

Ten sposób nie działa teraz:

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

To działa:

 btn.titleLabel?.font = UIFont.init(name: "Helvetica", size:12)
RealNmae
źródło
0

ta praca dla mnie, dzięki. Chcę zmienić rozmiar tekstu, a nie zmieniać nazwę czcionki.

var fontSizeButtonBig:Int = 30

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

Mahasam
źródło