1

我想知道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" size:0.0]。该字体实际上不存在,因此返回的UIFontnil

使用dictionaryWithObjectsAndKeys的旧方法可以很好地处理nil字体,但是新的@{}语法会使应用程序崩溃。

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

由于使用dictionaryWithObjectsAndKeys的旧方法效果很好,并且显然可以处理nil字体,所以我倾向于只使用它并在晚上轻松入睡。

我当然可以输入逻辑来检查nil字体并采取措施处理它,但由于旧方法处理这种情况,这似乎是不必要的浪费时间。

总是使用旧语法会更好吗,因为不知道未来设备上可能会使用哪些字体?

在这个问题上,Apple 有点失望。

有什么想法、意见或建议吗?

4

1 回答 1

1

您可以使用

NSArray *familyNames = [UIFont familyNames];

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

 NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];

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

于 2013-08-29T20:45:32.350 回答