字体描述符在 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 上的相同字体系列