给定一个UIFont或CTFont,我如何判断字体是粗体还是斜体?
ou6hu8tu1#
没有理由使用核心文本,您可以简单地向UIFont请求fontDescriptor。
UIFont *font = [UIFont boldSystemFontOfSize:17.0f]; UIFontDescriptor *fontDescriptor = font.fontDescriptor; UIFontDescriptorSymbolicTraits fontDescriptorSymbolicTraits = fontDescriptor.symbolicTraits; BOOL isBold = (fontDescriptorSymbolicTraits & UIFontDescriptorTraitBold) != 0;
接下来,这可能是询问字体特征的最简单方法。
rm5edbpk2#
如果要使用Swift执行此操作:
extension UIFont { var isBold: Bool { return fontDescriptor.symbolicTraits.contains(.traitBold) } var isItalic: Bool { return fontDescriptor.symbolicTraits.contains(.traitItalic) } }
用法:
let font: UIFont = UIFont.preferredFont(forTextStyle: .headline) if font.isBold { print("it's bold..") }
sr4lhrrt3#
查看字体名称并不总是有效的。考虑字体“Courier Oblique”(斜体)或“HoeflerText-Black”(粗体),这两种字体的名称中都不包含“粗体”或“斜体”。给定CTFontRef字体,确定它是粗体还是斜体的正确方法是使用CTFontGetSymbolicTraits函数:
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);
brjng4g34#
根据Arjan的答案回答Swift 3/4:
4条答案
按热度按时间ou6hu8tu1#
iOS7字体描述符
没有理由使用核心文本,您可以简单地向UIFont请求fontDescriptor。
接下来,这可能是询问字体特征的最简单方法。
rm5edbpk2#
如果要使用Swift执行此操作:
用法:
sr4lhrrt3#
查看字体名称并不总是有效的。考虑字体“Courier Oblique”(斜体)或“HoeflerText-Black”(粗体),这两种字体的名称中都不包含“粗体”或“斜体”。
给定
CTFontRef
字体,确定它是粗体还是斜体的正确方法是使用CTFontGetSymbolicTraits
函数:brjng4g34#
根据Arjan的答案回答Swift 3/4: