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