iOS设备上可以保证哪些字体可用?

时间:2013-08-29 20:00:17

标签: ios objective-c fonts nsdictionary

我想知道哪些字体可以在 iOS 设备上使用。

我用过它并且工作正常:

[[UITabBarItem appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor grayColor],      UITextAttributeTextColor,
  [UIColor lightGrayColor], UITextAttributeTextShadowColor,
  [NSValue valueWithUIOffset:UIOffsetMake(1, 1)], UITextAttributeTextShadowOffset,
  [UIFont fontWithName:@"Helvetica Bold" size:0.0], UITextAttributeFont,
  nil]
                                         forState:UIControlStateNormal];

然后我认为使用词典的新语法可能会更好更方便,所以我尝试了这个:

[[UITabBarItem appearance] setTitleTextAttributes:@{
                             UITextAttributeFont : [UIFont fontWithName:@"Helvetica-Bold" size:0.0f],
                        UITextAttributeTextColor : [UIColor grayColor],
                  UITextAttributeTextShadowColor : [UIColor lightGrayColor],
                 UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetMake(1.0f, 1.0f)],
 } forState:UIControlStateNormal];

它确实有效,但我关注的是一些问题。

最初,我尝试过这种字体, [UIFont fontWithName:@“Helvetica Bold”尺寸:0.0] 。该字体实际上不存在,因此返回的 UIFont nil

使用 dictionaryWithObjectsAndKeys 的旧方法处理 nil 字体就好了,但新的 @ {} 语法使应用程序崩溃。

我能够通过使用正确的字体名称来解决这个问题, @“Helvetica-Bold”(需要连字符),但我担心选择字体并使用此语法(如果有)设备可能无法使用所选字体并崩溃。

由于使用 dictionaryWithObjectsAndKeys 的旧方法工作正常,并且显然可以处理 nil 字体,因此我倾向于使用它并在晚上轻松入睡。

我当然可以用逻辑来检查 nil 字体并采取措施来解决这个问题,但是由于旧方法处理了这种情况,这似乎是一种不必要的浪费时间。

总是使用旧语法会更好吗,因为无法确定未来设备上可用的字体是什么?

对于这个问题,Apple有些失望。

有任何想法,意见或建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

NSArray *familyNames = [UIFont familyNames];

然后对于数组中的每个familyName,您可以看到可用的fontNames:

 NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];

这将为您提供设备上可用的字体名称列表。