Определить, является ли шрифт жирным шрифтом / курсивом на iOS? - PullRequest
18 голосов
/ 10 июля 2011

Учитывая UIFont или CTFont, как я могу определить, является ли шрифт полужирным / курсивом?

Ответы [ 4 ]

43 голосов
/ 11 декабря 2013

Дескриптор шрифта iOS7

Нет причин использовать Core Text, вы можете просто попросить UIFont для fontDescriptor.

        UIFont *font = [UIFont boldSystemFontOfSize:17.0f];
        UIFontDescriptor *fontDescriptor = font.fontDescriptor;
        UIFontDescriptorSymbolicTraits fontDescriptorSymbolicTraits = fontDescriptor.symbolicTraits;
        BOOL isBold = (fontDescriptorSymbolicTraits & UIFontDescriptorTraitBold) != 0;

В дальнейшем это, вероятно, самый простой способ спросить о чертахшрифта.

34 голосов
/ 25 февраля 2016

Если вы хотите сделать это с Swift 2.0 :

extension UIFont {
    var isBold: Bool {
        return fontDescriptor().symbolicTraits.contains(.TraitBold)
    }

    var isItalic: Bool {
        return fontDescriptor().symbolicTraits.contains(.TraitItalic)
    }
}

Использование:

let font: UIFont = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)
if font.isBold {
  print("it's bold..")
}
34 голосов
/ 10 июля 2011

Просмотр имени шрифта не всегда работает.Рассмотрим шрифт «Курьер наклонный» (курсив) или «HoeflerText-Black» (полужирный), ни один из них не содержит «полужирный» или «курсив» в своих именах.

Задан шрифт какCTFontRef, правильный способ определить, выделен ли он жирным шрифтом или курсивом, - использовать функцию CTFontGetSymbolicTraits:

CTFontRef font = CTFontCreateWithName((CFStringRef)@"Courier Oblique", 10, NULL);
CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(font);
BOOL isItalic = ((traits & kCTFontItalicTrait) == kCTFontItalicTrait);
BOOL isBold = ((traits & kCTFontBoldTrait) == kCTFontBoldTrait);
NSLog(@"Italic: %i Bold: %i", isItalic, isBold);
CFRelease(font);
5 голосов
/ 20 апреля 2018

Ответ за Свифт 3/4 на основании ответа Арджана:

extension UIFont {
    var isBold: Bool {
        return fontDescriptor.symbolicTraits.contains(.traitBold)
    }

    var isItalic: Bool {
        return fontDescriptor.symbolicTraits.contains(.traitItalic)
    }
}
...