如何检查iOS版本中是否有字体?

tg2*_*007 51 iphone ios4 ios

我目前正在开发一个使用"ChalkboardSE-Regular"字体的应用程序,我的部署目标是4.0+.此字体在4.1中不可用,但在4.3中受支持.检查字体是否存在的最佳方法是什么,如果不存在,请在<4.1版本的iOS上使用其他支持的字体.[UIFont familyName]返回这些字体的列表"Chalkboard SE"

提前致谢!

Ť

Ste*_*HHH 110

[UIFont familyName]支持回iPhone OS 2.0(2.0之前,iPhone或iPod touch上不允许第三方应用),所以我会用它来检查当前设备上是否存在字体系列,如果不存在存在,为该版本的iOS使用合适的后备字体.这是John Gruber 2007年原版iPhone中的iPhone字体列表(与当天的Mac OS X中的字体形成对比).我没有检查过它们,但我检查的iOS字体仍然在iOS 5中:

以下是使用示例[UIFont familyName]:

NSLog (@"Font families: %@", [UIFont familyNames]);
Run Code Online (Sandbox Code Playgroud)

这将生成如下列表:

字体系列:( Thonburi,"Snell Roundhand","Academy Engraved LET",等等.

一旦知道了姓氏,就可以使用UIFont类方法fontNamesForFamilyName获取NSArray中所有字体的名称.例如:

NSLog (@"Courier New family fonts: %@", [UIFont fontNamesForFamilyName:@"Courier New"]);
Run Code Online (Sandbox Code Playgroud)

这将产生一个这样的列表:

Courier New系列字体:( CourierNewPSMT,"CourierNewPS-BoldMT","CourierNewPS-BoldItalicMT","CourierNewPS-ItalicMT")

以下示例代码打印当前设备上每个系列中每种字体的列表:

NSArray *fontFamilies = [UIFont familyNames];

for (int i = 0; i < [fontFamilies count]; i++)
{
    NSString *fontFamily = [fontFamilies objectAtIndex:i];
    NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
    NSLog (@"%@: %@", fontFamily, fontNames);
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看iOS Developer Reference文档,了解UIFont类方法familyNamesfontNamesForFamilyName : .

  • 谢谢你的例子.正是我在寻找的东西. (2认同)

Ale*_*ano 40

如果您使用Swift,您可以打印所有字体(见下文).您还可以检查字体是否存在.

for family in UIFont.familyNames {
    print("\(family)")

    for name in UIFont.fontNames(forFamilyName: family) {
        print("   \(name)")
    }
}
Run Code Online (Sandbox Code Playgroud)


mat*_*att 14

此字体在4.1中不可用,但在4.3中受支持.检查字体是否存在的最佳方法是什么

只需要以通常的方式使用字体UIFont* f = [UIFont fontWithName:... size:...];.如果字体不可用,则result(f)将为nil.

(保证字体可用性的一种方法是将其包含在应用程序包中...)


Bea*_*lle 9

Swift 3.x

忘记那些for循环,这是查看iOS支持的字体的最简单方法.

只需在操场上运行以下任何一项即可.


仅限姓氏

输入

dump(UIFont.familyNames)
Run Code Online (Sandbox Code Playgroud)

产量

? 75 elements
  - "Copperplate"
  - "Heiti SC"
  - "Kohinoor Telugu"
  ...
Run Code Online (Sandbox Code Playgroud)

仅字体名称

输入

dump(UIFont.familyNames.flatMap { UIFont.fontNames(forFamilyName: $0) })    
Run Code Online (Sandbox Code Playgroud)

产量

? 248 elements
  - "Copperplate-Light"
  - "Copperplate"
  - "Copperplate-Bold"
  ...
Run Code Online (Sandbox Code Playgroud)

指定系列名称的字体名称

输入

dump(UIFont.fontNames(forFamilyName: "Helvetica Neue"))
Run Code Online (Sandbox Code Playgroud)

产量

? 14 elements
  - "HelveticaNeue-Italic"
  - "HelveticaNeue-Bold"
  - "HelveticaNeue-UltraLight"
  - "HelveticaNeue-CondensedBlack"
  ...
Run Code Online (Sandbox Code Playgroud)