在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..") }