fontDescriptorWithSymbolicTraits 方法返回不同字体系列中的新字体描述符引用,而不是 iOS13 上的相同字体系列

Posted

技术标签:

【中文标题】fontDescriptorWithSymbolicTraits 方法返回不同字体系列中的新字体描述符引用,而不是 iOS13 上的相同字体系列【英文标题】:fontDescriptorWithSymbolicTraits method returns a new font descriptor reference in a different font family instead of same font family on iOS13 【发布时间】:2019-08-09 06:36:49 【问题描述】:

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    [ViewController bold];



+(UIFont *)systemFontCaption

    return [UIFont systemFontOfSize:20.0f weight:UIFontWeightRegular];


+(UIFont*)bold

    UIFont *font = [ViewController systemFontCaption];

    UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:font.fontName size:font.pointSize];
    UIFontDescriptor *styleDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:[fontDescriptor symbolicTraits] | UIFontDescriptorTraitBold];
    UIFont *boldFont = [UIFont fontWithDescriptor:styleDescriptor size:font.pointSize];
    return  boldFont;

预期结果:

粗体字体应属于同一字体系列,即 SFUI-Regular

实际结果:

粗体字体属于不同的字体系列,即 TimesNewRoman

【问题讨论】:

遇到了完全相同的问题,代码更简单:[UIFont fontWithName:[UIFont boldSystemFontOfSize:12.].fontName size:12.] 在 ios 13 上返回 TimeNewRoman 字体而不是 San Francisco。这个用于工作的代码....从 iOS 3 开始!你知道发生了什么吗? Apple 回应 > “这是由于系统字体名称使用不当造成的。与其按名称创建新的字体描述符,不如使用 - [UIFont fontDescriptor]” 【参考方案1】:

看起来 Apple 自...iOS 13 beta 以来就存在属性字符串字体的错误!但是这个问题只在 Xcode 11+ 上显示。

Open radar

最好的办法是不使用系统字体,直接使用字体名称。

【讨论】:

以上是关于fontDescriptorWithSymbolicTraits 方法返回不同字体系列中的新字体描述符引用,而不是 iOS13 上的相同字体系列的主要内容,如果未能解决你的问题,请参考以下文章