检测iOS上的字体是粗体还是斜体?

时间:2011-07-09 23:55:39

标签: ios uifont

鉴于UIFont或CTFont,如何判断字体是粗体还是斜体?

4 个答案:

答案 0 :(得分:43)

iOS7字体描述符

没有理由使用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)
    }
}