iOS 8中字体描述符返回nil

6
以下代码在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];

在设备和模拟器上测试,仍然出现相同的错误。


2
我也遇到了Baskerville字体的同样问题。事实上,我正在学习Ray Wenderlich的iOS 7教程。正如你所说,这是一个iOS 8特定的问题。 - Ken Hui
2个回答

6

顺便说一句,这是我想出来的解决方法,使用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文档,但似乎没有记录:(我的实现看起来像这样,你介意看一下吗? - el.severo
我想使用我的文本字段系统字体和大小,而不是fontFamily。我只想要粗体。 - Mihir Oza

0
对我来说,fontDescriptorWithFontAttributes像以前一样工作,但是fontDescriptorWithSymbolicTraits失败了。 我通过回到使用[UIFont fontWithName:size:]来解决它。
[self.titleLabel setFont:[UIFont fontWithName:@"PTSans-Bold" size:47.67]];

1
这样做是可以的,但不会解决问题,因为你无法为iOS中的每个字体系列硬编码粗体和斜体。 - Metodij Zdravkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接