Как изменить шрифт UIButton с помощью Swift

207

Я пытаюсь изменить шрифт UIButton с помощью Swift ...

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

Однако .fontне рекомендуется, и я не уверен, как изменить шрифт в противном случае.

Какие-либо предложения?

Стивен Фокс
источник

Ответы:

422

Используйте titleLabelвместо этого. fontСвойство устаревший в прошивкой 3.0. Это также не работает в Objective-C. titleLabelявляется меткой, используемой для отображения заголовка UIButton.

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

Однако при настройке текста заголовка следует использовать только setTitle:forControlState:. Не используйте, titleLabelчтобы установить любой текст для заголовка напрямую.

codester
источник
1
Ребята, вы знаете, почему я должен «развернуть»? мой лейбл ?? вот так ... myButton.titleLabel! .font = ...
DanMoore
beacause titleLabelявляется необязательным свойством. Спасибо ранее в бета-версии не было.
кодировщик
4
Этот метод позволил мне изменить имя / стиль шрифта, но изменение размера не имело значения.
Дэйв Дж
7
Вам не нужно заставлять разматывать этикетку. myButton.titleLabel?.font = ...будет работать, так как если titleLabel равен нулю, он просто будет
неактивным
1
Почему этот метод не работает для пользовательского подкласса UIbutton?
Муниб
69

Для Swift 3.0 :

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

где «boldSystemFont» и «16» могут быть заменены вашим собственным шрифтом и размером.

ruthless_g
источник
44

Точечная нотация потрясающая (swift 4.2) 👌

btn.titleLabel?.font = .systemFont(ofSize: 12)
eonist
источник
@mahasam UIFont выводится, этот ответ такой же, как и другие, но только без UIFont (но потому, что он выводится компилятором, но он одинаковый). PD: Я всегда стараюсь писать таким образом, но просто чтобы позволить вам знаю, что то же самое
Пабло Санчес Гомес
1
@mahasam: «Точечная нотация» - это то же самое, что и вывод. И да, это хорошая привычка. И это не те же ответы, что и другие, поскольку они более лаконичны, чем другие ответы. ИМО
эонист
9

Вам не нужно принудительно распаковывать titleLabel, чтобы установить его.

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

Поскольку вы не используете titleLabel здесь, вы можете просто использовать его по желанию, и если это ноль, то это просто не будет.

Я также добавлю, как говорят другие люди, свойство font устарело, и обязательно используйте его setTitle:forControlState:при настройке текста заголовка.

teradyl
источник
7

Из документации :

Шрифт, используемый для отображения текста на кнопке. ( Устаревший в iOS 3.0 . Вместо этого используйте fontсвойство titleLabel.)

zneak
источник
5

Если у вас проблемы с размером шрифта (ваш шрифт не реагирует на изменения размера) ...

@codester имеет правильный код:

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

Тем не менее, мой размер шрифта не изменился. Оказывается, я спрашивал о несуществующем шрифте («HelveticaNeue-Regular»). Это не вызывало сбой, но, казалось, просто игнорировало это утверждение шрифта из-за этого. После того, как я изменил шрифт на что-то, что существует, изменения в "size: x" действительно отрисовались.

Дэйв Дж
источник
5

мы можем использовать различные типы системных шрифтов, как показано ниже

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

и ваш собственный шрифт, как показано ниже

    myButton.titleLabel?.font = UIFont(name: "Helvetica", size:12)
Султан али
источник
4

Вы должны пройти через titleLabelсобственность.

button.titleLabel.font

fontИмущество устаревшим с прошивкой 3.0.

Крис Вагнер
источник
4

Посмотрите здесь .

Вместо этого вы должны установить шрифт для заголовка кнопки.

myButton.titleLabel!.font = UIFont(name: "...", 10)
Коннор
источник
4

Это работает в Swift 3.0:

btn.titleLabel?.font = UIFont(name:"Times New Roman", size: 20) 
ОЗУ
источник
4

Если вы устанавливаете AttributedString для UIButton, то вы можете сделать следующее.

let attributedText = NSAttributedString(string: "Hello", attributes: [NSAttributedStringKey.font: UIFont(name: "Calibri", size: 19)])
okayButton.setAttributedTitle(attributedText, for: .normal)
Анирудха Махале
источник
4

Если вам нужно изменить только размер ( Swift 4.0 ):

button.titleLabel?.font = button.titleLabel?.font.withSize(12)
Karbaman
источник
2

Пример: button.titleLabel?.font = UIFont(name: "HelveticaNeue-Bold", size: 12)

  • Если вы хотите использовать шрифт по умолчанию из своего семейства, используйте, например: "HelveticaNeue"
  • Если вы хотите указать семейный шрифт, используйте, например: «HelveticaNeue-Bold»
janaz
источник
1

Этот способ не работает сейчас:

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

Это работает:

 btn.titleLabel?.font = UIFont.init(name: "Helvetica", size:12)
RealNmae
источник
0

эта работа для меня, спасибо. Я хочу изменить только размер текста, а не изменить имя шрифта.

var fontSizeButtonBig:Int = 30

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

mahasam
источник
0

В Swift 5 вы можете использовать точечную нотацию для более быстрого синтаксиса:

myButton.titleLabel?.font = .systemFont(ofSize: 14, weight: .medium)

В противном случае вы будете использовать:

myButton.titleLabel?.font = UIFont.systemFont(ofSize: 14, weight: .medium)

andrewlundy
источник