在iOS上检测字体是否为粗体/斜体?
鉴于一个UIFont或一个CTFont,我怎么能判断字体是粗体/斜体?
查看字体的名称并不总是工作。 考虑字体“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);
iOS7字体描述符
没有理由使用核心文本,你可以简单地问UIFont的fontDescriptor。
UIFont *font = [UIFont boldSystemFontOfSize:17.0f]; UIFontDescriptor *fontDescriptor = font.fontDescriptor; UIFontDescriptorSymbolicTraits fontDescriptorSymbolicTraits = fontDescriptor.symbolicTraits; BOOL isBold = (fontDescriptorSymbolicTraits & UIFontDescriptorTraitBold) != 0;
outlook这可能是询问字体特征的最简单的方法。
如果你想用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..") }