鉴于UIFont或CTFont,如何判断字体是粗体还是斜体?
答案 0 :(得分:43)
没有理由使用Core Text,您只需向UIFont询问fontDescriptor。
UIFont *font = [UIFont boldSystemFontOfSize:17.0f];
UIFontDescriptor *fontDescriptor = font.fontDescriptor;
UIFontDescriptorSymbolicTraits fontDescriptorSymbolicTraits = fontDescriptor.symbolicTraits;
BOOL isBold = (fontDescriptorSymbolicTraits & UIFontDescriptorTraitBold) != 0;
展望未来,这可能是询问字体特征的最简单方法。
答案 1 :(得分:34)
查看字体的名称并不总是有效。考虑字体“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 :(得分:34)
如果您想使用 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)
根据Arjan的答案回答 Swift 3/4 :
extension UIFont {
var isBold: Bool {
return fontDescriptor.symbolicTraits.contains(.traitBold)
}
var isItalic: Bool {
return fontDescriptor.symbolicTraits.contains(.traitItalic)
}
}