给定 UIFont 或 CTFont,我如何判断字体是粗体/斜体?
问问题
8424 次
4 回答
45
iOS7 字体描述符
没有理由使用 Core Text,你可以简单地向 UIFont 询问 fontDescriptor。
UIFont *font = [UIFont boldSystemFontOfSize:17.0f];
UIFontDescriptor *fontDescriptor = font.fontDescriptor;
UIFontDescriptorSymbolicTraits fontDescriptorSymbolicTraits = fontDescriptor.symbolicTraits;
BOOL isBold = (fontDescriptorSymbolicTraits & UIFontDescriptorTraitBold) != 0;
展望未来,这可能是询问字体特征的最简单方法。
于 2013-12-11T09:31:32.917 回答
36
如果你想用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..")
}
于 2016-02-25T15:36:50.323 回答
35
查看字体的名称并不总是有效。考虑字体“Courier Oblique”(斜体)或“HoeflerText-Black”(粗体),它们的名称中都不包含“粗体”或“斜体”。
给定字体 a 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);
于 2011-07-10T04:28:08.397 回答
9
Swift 3/4的答案基于 Arjan 的回答:
extension UIFont {
var isBold: Bool {
return fontDescriptor.symbolicTraits.contains(.traitBold)
}
var isItalic: Bool {
return fontDescriptor.symbolicTraits.contains(.traitItalic)
}
}
于 2018-04-20T04:59:56.170 回答