Определить, является ли шрифт жирным шрифтом / курсивом на iOS?

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

4 ответа

Решение

Просмотр имени шрифта не всегда работает. Рассмотрим шрифт "Курьер наклонный" (курсив) или "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);

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

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

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

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

Если вы хотите сделать это с 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..")
}

Ответ для Свифта 3/4, основанный на ответе Арджана:

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

    var isItalic: Bool {
        return fontDescriptor.symbolicTraits.contains(.traitItalic)
    }
}
Другие вопросы по тегам