首页 > 解决方案 > 旧金山字体:粗体+斜体?

问题描述

过去,如果我想在同一文本上使用粗体和斜体,我会按名称选择字体,如下所示:

font = [UIFont fontWithName:@"HelveticaNeue-BoldItalic" size:size];

现在我正在尝试使用当前的 iOS 系统字体 San Francisco。这个答案说按名称引用这个字体是不安全的,事实上,当我尝试它时,一些与字体相关的方法什么都不做,有些会导致应用程序崩溃。

当然有boldSystemFontOfSizeanditalicSystemFontOfSize方法,但是没有boldItalicSystemFontOfSize方法。

这是否留下任何其他方式来使用旧金山字体的粗体+斜体?

标签: iosobjective-cfonts

解决方案


这是基于@rmaddy 建议的答案的类别:

@interface UIFont (UIFontBoldItalic)
+ (UIFont *)boldItalicSystemFontOfSize:(CGFloat)fontSize;
@end

@implementation UIFont (UIFontBoldItalic)
+ (UIFont *)boldItalicSystemFontOfSize:(CGFloat)fontSize {
    UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];
    uint32_t existingTraitsWithNewTrait = [fontDescriptor symbolicTraits] | UIFontDescriptorTraitBold | UIFontDescriptorTraitItalic;
    UIFontDescriptor *updatedFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:existingTraitsWithNewTrait];
    UIFont *font = [UIFont fontWithDescriptor:updatedFontDescriptor size:fontSize];
    return font;
}
@end

尽管这没有在任何地方指定“系统字体”或“旧金山”,但我认为UIFontTextStyleBody它将返回系统字体。


推荐阅读