字体描述符在 iOS 8 中返回 nil

Posted

技术标签:

【中文标题】字体描述符在 iOS 8 中返回 nil【英文标题】:Font Descriptor returns nil in iOS 8 【发布时间】:2014-09-22 14:59:50 【问题描述】:

以下代码在 ios 7 中运行良好,但在 iOS 8 中不返回粗体或斜体字体。对于 Helvetica Neue 可以,但不适用于 Arial 字体。

UIFontDescriptor *descriptor1 = [UIFontDescriptor fontDescriptorWithFontAttributes:@UIFontDescriptorFamilyAttribute: @"Arial"];
UIFontDescriptor* boldFontDescriptor1 = [descriptor1 fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
UIFont* font1 = [UIFont fontWithDescriptor:boldFontDescriptor1 size:16.0];
[self.lblArialB setFont:font1];

在设备和模拟器上测试过,还是一样的错误。

【问题讨论】:

Baskerville 字体也有同样的问题。事实上,我正在做 Ray Wenderlich 的 iOS 7 教程。正如您所说,这是 iOS 8 特有的问题。 【参考方案1】:

FWIW,这是我想出的解决方法,使用 UIFontDescriptor 的属性字典初始化程序而不是看似错误的 fontDescriptorWithSymbolicTraits:

NSString *fontFamily = @"Arial";
BOOL isBold = YES;
BOOL isItalic = YES;
CGFloat fontSize = 20.0;
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithFontAttributes:
                  @
                    @"NSFontFamilyAttribute" : fontFamily,
                    @"NSFontFaceAttribute" : (isBold && isItalic ? @"Bold Italic" : (isBold ? @"Bold" : (isItalic ? @"Italic" : @"Regular")))
                    ];
UIFont *font = [UIFont fontWithDescriptor:fontDescriptor size:fontSize];

【讨论】:

@neural5torm:如何在 Swift 中使用它?检查了Apple documentation,但似乎没有记录:(我的实现看起来像this,你介意看看吗? 我如何使用我的文本字段系统字体和大小来代替 fontFamily?我只想要粗体【参考方案2】:

对我来说,fontDescriptorWithFontAttributes 像以前一样工作,但 fontDescriptorWithSymbolicTraits 惨遭失败。 我通过回到使用 [UIFont fontWithName: size:]

解决了这个问题
[self.titleLabel setFont:[UIFont fontWithName:@"PTSans-Bold" size:47.67]];

【讨论】:

这没问题,但不能解决问题,因为您不能为 iOS 中的每个字体系列硬编码粗体和斜体。

以上是关于字体描述符在 iOS 8 中返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

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

尾随返回类型的“覆盖”限定符在哪里?

父级中的Java方法占位符在子级中使用[重复]

嵌入式 C - 易失性限定符在我的中断例程中无关紧要

占位符怎么设置

vba split 分割符在所要分割的字符串中不存在时会返回啥值?