Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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