旧金山字体:粗体+斜体?

时间:2019-02-26 16:53:26

标签: ios objective-c fonts

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

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

现在,我正在尝试使用当前的iOS系统字体San Francisco进行此操作。 This answer表示,按名称引用该字体并不安全,实际上,当我尝试使用该字体时,某些与字体相关的方法无济于事,而某些应用程序崩溃了。

当然有boldSystemFontOfSizeitalicSystemFontOfSize方法,但没有boldItalicSystemFontOfSize方法。

是否还有其他方式可以在旧金山字体中使用粗体+斜体?

1 个答案:

答案 0 :(得分:0)

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

@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将返回系统字体。