Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么某些iOS字体系列不支持UIFontDescriptorRaitbold?_Ios_Uifont_Uifontdescriptor - Fatal编程技术网

为什么某些iOS字体系列不支持UIFontDescriptorRaitbold?

为什么某些iOS字体系列不支持UIFontDescriptorRaitbold?,ios,uifont,uifontdescriptor,Ios,Uifont,Uifontdescriptor,我尝试使用的方法是在给定字体系列名称的情况下获得一个粗体的iOS UIFont,这种方法似乎只适用于某些字体。例如: UIFont* font = [UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:12]; NSLog(@"A: Font name: %@", [font fontName]); // desired method works for Helvetica Neue UIFontDescriptor *desc = [[UIF

我尝试使用的方法是在给定字体系列名称的情况下获得一个粗体的iOS UIFont,这种方法似乎只适用于某些字体。例如:

UIFont* font = [UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:12];
NSLog(@"A: Font name: %@", [font fontName]);

// desired method works for Helvetica Neue
UIFontDescriptor *desc = [[UIFontDescriptor alloc] init];
desc = [desc fontDescriptorWithFamily:@"Helvetica Neue"];
desc = [desc fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
font = [UIFont fontWithDescriptor:desc size:12];
NSLog(@"B: Font name: %@", [font fontName]);

// desired method fails for Times New Roman
desc = [[UIFontDescriptor alloc] init];
desc = [desc fontDescriptorWithFamily:@"Times New Roman"];
NSLog(@"desc: %@", desc);
desc = [desc fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
NSLog(@"desc bold: %@", desc);
打印(在iOS 8.1模拟器上):

A:字体名称:TimesNewRomanPS BoldMT
B:字体名称:HelveticaNeue粗体
desc:UICTFontDescriptor={NSFontFamilyAttribute=“Times New Roman”}
描述粗体:(空)

这是一个bug,还是不是设计用于每个字体系列(实际上有一个粗体变体)?我真的不想被迫解析字体名称,寻找“粗体”或类似的东西。

这是一个bug
fontDescriptorWithSymbolicTraits:
保证返回字体描述符;因此,返回
nil
是意外行为

事实上,如果您使用Swift重写相同的内容,它将导致崩溃,因为
desc
不是可选的:

var desc = UIFontDescriptor()
desc = desc.fontDescriptorWithFamily("Times New Roman")
desc = desc.fontDescriptorWithSymbolicTraits(.TraitBold)
println(desc); //crash

UIFontDescriptor
是否返回
UIFont
是一个单独的问题。你应该归档雷达。

@neural5torm为这个iOS8错误提供了一个很好的解决方法:

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];
原职:

谢谢!我为此提交了错误报告18812268。@devx苹果有没有解决过这个问题?我也有同样的问题。这种情况已经改变,可能是在iOS 10 SDK/Swift 2.3/Xcode 8中。如果查看
UIFontDescriptor
标题,您会发现:
public func FontDescriptor WithSymbolicTraits(symbolicTraits:UIFontDescriptorSymbolicTraits)->UIFontDescriptor?//返回同一系列中具有给定符号特征的新字体描述符引用,如果在系统中找不到,则返回零。
因此,fontDescriptorWithSymbolicTraits不再保证返回字体描述符。我是此fontDescriptorWithSymbolicTraits:错误的另一个受害者。这是一个遗憾,因为它与iOS7上的任何字体都能很好地配合使用。与此同时,你找到了一个聪明的解决办法吗?我也不想解析“-Black |-Bold |-Italic |-斜体”我的字体名称。
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];