Как установить полужирный шрифт и курсив на UILabel на iPhone / iPad?


140

Как установить полужирный и курсив на UILabeliPhone / iPad? Я искал форум, но мне ничего не помогло. Кто-нибудь может мне помочь?


Если вы используете пользовательский шрифт без курсивного шрифта, вы можете [попробовать этот метод.] [1] [1]: stackoverflow.com/questions/21009957/…
Jakehao

Ответы:


132
sectionLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];

Существует список названий шрифтов, которые вы можете установить вместо атрибута fontWithName. Ссылка находится здесь.


5
Лучший ответ - это тот, который использует метод расширения .withTraits () от @Maksymilian Wojakowski
No Refunds No Returns

Сэр, сэр, как установить полужирный шрифт в стиле текстового
Рамани Хитеш

3
Это проблематично, поскольку вы используете фиксированное имя шрифта. Поскольку это может быть изменено, это не лучшее решение. Ответ Максимилиана Вояковского лучше и гораздо гибче.
Ray Wojciechowski

278

Не пытайтесь играть с названиями шрифтов. Используя дескриптор шрифта, вам не нужны имена:

UILabel * label = [[UILabel alloc] init]; // use your label object instead of this
UIFontDescriptor * fontD = [label.font.fontDescriptor
            fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold
                            | UIFontDescriptorTraitItalic];
label.font = [UIFont fontWithDescriptor:fontD size:0];

size:0 означает "сохранить размер как есть"

В Swift попробуйте следующее расширение:

extension UIFont {

    func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor()
            .fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
        return UIFont(descriptor: descriptor, size: 0)
    }

    func boldItalic() -> UIFont {
        return withTraits(.TraitBold, .TraitItalic)
    }

}

Тогда вы можете использовать это так:

myLabel.font = myLabel.font.boldItalic()

или даже добавить дополнительные черты вроде Condensed:

myLabel.font = myLabel.font.withTraits(.TraitCondensed, .TraitBold, .TraitItalic)

Обновление для Swift 4:

extension UIFont {
  var bold: UIFont {
    return with(traits: .traitBold)
  } // bold

  var italic: UIFont {
    return with(traits: .traitItalic)
  } // italic

  var boldItalic: UIFont {
    return with(traits: [.traitBold, .traitItalic])
  } // boldItalic


  func with(traits: UIFontDescriptorSymbolicTraits) -> UIFont {
    guard let descriptor = self.fontDescriptor.withSymbolicTraits(traits) else {
      return self
    } // guard

    return UIFont(descriptor: descriptor, size: 0)
  } // with(traits:)
} // extension

Используйте его следующим образом:

myLabel.font = myLabel.font.bold

или

myLabel.font = myLabel.font.italic

или

myLabel.font = myLabel.font.with(traits: [ .traitBold, .traitCondensed ])

Обновление для Swift 5

extension UIFont {
    var bold: UIFont {
        return with(.traitBold)
    }

    var italic: UIFont {
        return with(.traitItalic)
    }

    var boldItalic: UIFont {
        return with([.traitBold, .traitItalic])
    }



    func with(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont {
        guard let descriptor = self.fontDescriptor.withSymbolicTraits(UIFontDescriptor.SymbolicTraits(traits).union(self.fontDescriptor.symbolicTraits)) else {
            return self
        }
        return UIFont(descriptor: descriptor, size: 0)
    }

    func without(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont {
        guard let descriptor = self.fontDescriptor.withSymbolicTraits(self.fontDescriptor.symbolicTraits.subtracting(UIFontDescriptor.SymbolicTraits(traits))) else {
            return self
        }
        return UIFont(descriptor: descriptor, size: 0)
    }
}

5
Не знаю, почему это не набрало больше голосов! Это отлично подходит для шрифтов, у которых нет полужирного или курсивного начертания!
Крис Принс

4
Аааа. Я понимаю, почему, возможно, это не так популярно. Доступно только для iOS7 и более поздних версий ...
Крис Принс,

3
Не знаю, следует ли это рассматривать в рамках NDA, но с исходным кодом Xcode6 и iOS8 GM я возвращаю дескриптор шрифта nil для пользовательского шрифта, тогда как в iOS7 он не был нулевым.
Крис Принс

@Maksymilian можем ли мы отказаться от этого метода где-нибудь на нескольких этикетках, например: uitableview
Маджид Башир

2
Просто небольшое примечание, поскольку этот ответ очень полезен: return withTraits(.TraitBold, .TraitCondensed)вероятно, он return withTraits(.TraitBold, .TraitItalic)должен соответствовать имени функции.
BreadicalMD

103

@Edinator, посмотри на это ..

myLabel.font = [UIFont boldSystemFontOfSize:16.0f]
myLabel.font = [UIFont italicSystemFontOfSize:16.0f];

используйте любой из вышеперечисленных одновременно, когда хотите


1
Эти два стиля не работают. В этом случае преобладает курсив. Спасибо за ответ!
Edi

@Edinator Ага, я знаю, что вам нужно использовать только по одному за раз ... Я тоже редактировал свой ответ!
Sudhanshu

8

Вы можете установить любой стиль шрифта, семейство, размер для метки, нажав на букву «T» в поле « Шрифт» .

Настройки шрифта метки


Но вот большой вопрос, помимо использования fontWithName: @ "Arial-Light", как указать другие веса на вашем скриншоте? Все всплывает жирным шрифтомSystemFontSize (of: __), но что, если кому-то нужен легкий или сверхлегкий?
Dave G

6

У меня та же проблема, что нужно применить жирный и курсив к метке и кнопке. Вы можете просто использовать следующий код для достижения этого эффекта:

myLabel.font = [UIFont fontWithName:@"Arial-BoldItalic" size:30.0];

1
Я думаю, вы имели в виду «Ариал», а не «Ариэль» :)
MMMM

Для Arial это не работает. Но он работает на Helvetica-BoldOblique. См. Документацию по UIFont здесь iphonedevwiki.net/index.php/UIFont
sudip

1
Вы имеете в виду "HelveticaNeue", а не "Arial" :)
jpmartineau

что, если мы добавим наш собственный шрифт .. ??
Маджид Башир,

6

С системным шрифтом по умолчанию iOS 7 вы будете использовать полужирный шрифт helvetica neue, если хотите сохранить системный шрифт по умолчанию.

    [titleText setFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0]];

Или вы можете просто назвать это:

    [titleText setFont:[UIFont boldSystemFontOfSize:16.0]];

6

Swift 3

Жирный:

let bondFont = UIFont.boldSystemFont(ofSize:UIFont.labelFontSize)

Курсив:

let italicFont = UIFont.italicSystemFont(ofSize:UIFont.labelFontSize)


3
 btn.titleLabel.font=[UIFont fontWithName:@"Helvetica neue" size:10];
 btn.titleLabel.font =  [UIFont boldSystemFontOfSize:btnPrev.titleLabel.font.pointSize+3];

вы можете сделать жирный шрифт метки / кнопки, также используя этот


3

Я сделал вариант ответа Максимилиана Вояковского, где вы можете добавить или удалить черту (-ы)

extension UIFont {

    func withTraits(_ traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor
            .withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits).union(self.fontDescriptor.symbolicTraits))
        return UIFont(descriptor: descriptor!, size: 0)
    }
    func withoutTraits(_ traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor
            .withSymbolicTraits(  self.fontDescriptor.symbolicTraits.subtracting(UIFontDescriptorSymbolicTraits(traits)))
        return UIFont(descriptor: descriptor!, size: 0)
    }
    func bold() -> UIFont {
        return withTraits( .traitBold)
    }

    func italic() -> UIFont {
        return withTraits(.traitItalic)
    }

    func noItalic() -> UIFont {
        return withoutTraits(.traitItalic)
    }
    func noBold() -> UIFont {
        return withoutTraits(.traitBold)
    }
}

пример

label.font = label.font.italic().bold()

это полезно при повторном использовании ячейки, и вы хотите удалить курсив, который вы поставили на метке в предыдущей ячейке


2

Недавно я написал сообщение в блоге об ограничениях UIFont API и способах их решения. Вы можете увидеть это здесь

С помощью кода, который я там предоставил, вы можете получить желаемый UIFont так же просто, как:

UIFont *myFont = [FontResolver fontWithDescription:@"font-family: Helvetica; font-weight: bold; font-style: italic;"];

А затем установите его на свой UILabel (или что-то еще) с помощью: myLabel.font = myFont;


2

Как уже упоминалось в этих ответах, вам просто нужно правильное название шрифта . Я считаю, что iOSFonts.com - самый полезный ресурс, позволяющий точно узнать, какое имя использовать.


Отличный ресурс! Я просмотрел его на своем устройстве iOS и нашел красивый шрифт, а затем использовал «fontWithName», чтобы получить его экземпляр.
Маркус Кнаппен Йоханссон

2

Пример полужирного текста:

UILabel *titleBold = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 30)];
UIFont* myBoldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
[titleBold setFont:myBoldFont];

Пример курсивного текста:

UILabel *subTitleItalic = [[UILabel alloc] initWithFrame:CGRectMake(10, 35, 200, 30)];
UIFont* myItalicFont = [UIFont italicSystemFontOfSize:[UIFont systemFontSize]];
[subTitleItalic setFont:myItalicFont];

2

Хотя ответ @tolbard потрясающий и хорошо работает!

Я считаю, что создание расширения для чего-то, чего можно достичь с помощью одной строчки кода, было бы лишним.

Вы можете получить полужирный и курсивный стиль для того же текста в label, установив свойство шрифта , используя , UIFontDescriptorкак показано ниже в примере ниже , с помощью Swift 4.0 :

label.font = UIFont(descriptor: UIFontDescriptor().withSymbolicTraits([.traitBold, .traitItalic])!, size: 12)

Другие варианты включают:

traitLooseLeading
traitTightLeading
traitUIOptimized
traitVertical
traitMonoSpace
traitCondensed
traitExpanded

Чтобы узнать больше о том, что означают эти символические черты? посетите здесь


2

Обновление потрясающего ответа Максимилиана Войяковского для Swift 3

extension UIFont {
    func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont? {
        guard let descriptorL = self.fontDescriptor.withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits)) else{
            return nil
        }
        return UIFont(descriptor: descriptorL, size: 0)
    }

    func boldItalic() -> UIFont? {
        return withTraits(traits: .traitBold, .traitItalic)
    }
}

1

Это очень просто. Вот код.

[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];

Это вам поможет.


Курсивом не ставится.
mattsson

Будет выделено только жирным шрифтом. Для курсива вы можете использовать построитель интерфейса.
Ашу

1

Просто хочу отметить это,

UIFont.systemFont(ofSize: 16, weight: UIFont.Weight.bold)
UIFont.boldSystemFont(ofSize: 16)

У них другой исход ...


0

Часто полужирный текст рассматривается в информационной архитектуре на другом уровне и, следовательно, не выделяется жирным и регулярным шрифтом в одной строке, поэтому вы можете разделить его на две метки / текстовые представления, одну обычную и полужирный курсив. И используйте редактор, чтобы выбрать стили шрифта.


0

С Swift 5

Для style = BOLD

label.font = UIFont(name:"HelveticaNeue-Bold", size: 15.0)

Для стиля = Средний

label.font = UIFont(name:"HelveticaNeue-Medium", size: 15.0)

Для стиля = Тонкий

label.font = UIFont(name:"HelveticaNeue-Thin", size: 15.0)

0

Здесь хорошие ответы, но если вы хотите, чтобы метка соответствовала предпочтительной категории размера пользователя, используйте preferredFont.

UIFont.systemFont(ofSize: UIFont.preferredFont(forTextStyle: .body).pointSize, weight: .bold)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.