Учитывая UIFont или CTFont, как определить, выделен ли шрифт жирным шрифтом/курсивом?
Определить, выделен ли шрифт жирным шрифтом/курсивом на iOS?
Ответ 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..")
}