首页 文章

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

提问于
浏览
1

我想知道 iOS 保证在 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];

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

[[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 字体并采取措施来解决这个问题,但是由于旧的方法处理了这种情况,所以似乎是不必要的浪费时间 .

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

苹果对这个问题有些失望 .

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

1 回答

  • 1

    您可以使用

    NSArray *familyNames = [UIFont familyNames];
    

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

    NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];
    

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

相关问题