如何从otf或ttf文件获取字体名称?

我在我以前的应用程序中使用了自定义字体。

文件名是“ProximaNova-Regular.otf”,并加载我刚刚使用的字体…

[UIFont fontWithName:@"ProximaNova-Regular" size:20]; 

这工作完美。

现在在这个新的应用程序,我有三个字体文件…

 Dude_Willie.otf Impact handsean.ttf 

但我不知道如何加载这些。

我努力了

 [UIFont fontWithName:<the file name> size:20]; 

但是这只是回到使用Helvetica。

我怎样才能find使用什么名字?

右键点击TTF – >获取信息

“全名”就是你要找的。

这就是TTF的工作。

编辑:

我只是使用了一个与“获取信息”中的“全名”名称不同的字体。

为了编译这个答案,如果上面的快速检查不起作用,请在您的项目中运行以下代码:

 for (NSString *fontFamilyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) { NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName); } } 

并search您要使用的字体的正确名称。

Swift 3.0代码:

 for fontFamilyName in UIFont.familyNames{ for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){ print("Family: \(fontFamilyName) Font: \(fontName)") } } 

按照以下四个简单步骤在iOS应用程序中添加和使用新字体:

  • your_new_font.ttfyour_new_font.otf添加到您的Xcode项目
  • 在项目的info.plist中,为your_new_font.ttfyour_new_font.otf添加一个新条目到UIAppFonts数组(这个文本的纯文本是'应用程序提供的字体')
  • 在这一点上,我build议添加这个临时块的debugging代码来转储您的应用程序可访问的所有字体,包括您新添加的your_new_font:
 for(NSString *fontfamilyname in [UIFont familyNames]) { NSLog(@"family:'%@'",fontfamilyname); for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) { NSLog(@"\tfont:'%@'",fontName); } NSLog(@"-------------"); } 
  • 在debugging输出中,查找新字体的“族”和“字体”名称。 将所显示的任何字体作为与您的新字体系列对应的“字体”名称(可能与您的新字体“系列”相关联的多个“字体”)传递给UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20] ,你应该做生意!

要在iOS中使用字体,您必须根据字体的FULL NAME (PostScript Name)加载字体,该字体有时(通常是)与字体的实际FILE NAME不同

假设你自己将字体文件“Arial-regular.ttf”重命名为“foo.ttf”。 包含在刚更名的字体文件中的字体仍然是“Arial-regular”。

有一些很好的编程方法可以在该线程上获取字体名称,但是我使用命令行有不同的方法。

如果您在Mac或Linux上,只需在命令行中运行此脚本(您使用自定义字体的目录)(使用fontconfig中的fc-scan实用程序(很可能已安装),但是如果没有,则可以通过自制程序: brew install fontconfig ):

 for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done 

下面是在我的~/Library/Fonts目录上运行的上述命令的屏幕截图:

在这里输入图像说明

上面的脚本将遍历当前目录中的所有.ttf.otf文件,然后打印出每种字体的PostScript名称 ,您可以使用该字体来引用XCode或其他地方的字体文件。

如果你想获得一些额外的信息(PostScriptName,Filename)和一些颜色编码,你可以运行这个替代脚本:

 for file in "$arg"*.{ttf,otf}; do postscriptname=$(fc-scan --format "%{postscriptname}\n" $file); printf "\033[36m PostScript Name:\033[0m %s \e[90m(%s)\033[0m\n" "$postscriptname" "$file"; done 

在这里输入图像说明

这比在你的AppDelegate.m文件中复制粘贴代码快一点,以便每次你想添加一个新的字体文件,这是stream行的方法,打印出来的名字,这也比在FontBook中打开Font快检查PostScript名称。

有用的提示:如果你在terminal中使用了上面的脚本,那么你只需input一个命令就可以获得当前目录中所有文件的所有PostScript字体名称(我的函数叫做fontnames所以我只需要这样做的目的是在目录中的terminal键入字体,并在其中包含字体,PostScript名称将自动打印,这样可以节省开发工作stream程的时间,并在需要时使用这个方便的脚本。

希望这可以帮助!

  • 安装字体
  • 在Mac上打开字体书应用程序
  • select字体并点击“信息”button
  • 您正在查找的名称是PostScript名称

例

你想知道如何得到这个名字: –

  NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]]; for (NSInteger indFamily=0; indFamily<[familyNames count]; ++indFamily) { NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]); NSArray *fontNames = [[NSArray alloc] initWithArray: [UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]]; for (NSInteger indFont=0; indFont<[fontNames count]; ++indFont) { NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]); } } 

希望它可以帮助你…

Swift 3.0

 for familyName in UIFont.familyNames { for fontName in UIFont.fontNames(forFamilyName: familyName ) { print("\(familyName) : \(fontName)") } } 

在将字体添加到项目/应用程序之后,添加此代码(可能仅在应用程序代理didFinishLaunchingWithOptions方法中),以便为您的应用程序打印出所有可用的字体。 从那个列表中你应该能够识别你之后的字体。 之后不要忘记删除不必要的代码。

 for (NSString *fontFamilyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) { NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName); } } 

Swift 1.2:

  for familyName in UIFont.familyNames() { for fontName in UIFont.fontNamesForFamilyName(familyName as! String) { println("\(familyName) : \(fontName)") } } 

您也可以使用otfinfo –info arial.ttf从命令行获取名称。 后记名称是您需要传递给UIFont构造函数的名称。

如果要以编程方式查找给定字体文件的字体名称:

 func loadFontName(for file: URL) throws -> String { let data = try Data(contentsOf: file) guard let provider = CGDataProvider(data: data as CFData) else { throw Error("Could not create data provider") } let font = CGFont(provider) guard let name = font.postScriptName else { throw Error("Could not get font name from font file") } return name as String } 

根据需要用您自己的可抛出的Error对象replace。

logging字体文件的家族名称,然后访问字体:

 // You can log all font family names suing **fontNamesForFamilyName** NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]); 

希望它可以帮助你。

另一种不涉及扫描模拟器或设备上存在的所有默认字体的“快速,实用”的破解方法是在故事板中使用字体。 然后,如果使用文本编辑器编辑故事板,则如果search“customFonts”标签,则可以看到与“内部”名称一起使用的字体:

 <customFonts key="customFonts"> <array key="Linotype - AvenirNextLTPro-Bold.otf"> <string>AvenirNextLTPro-Bold</string> </array> <array key="Linotype - AvenirNextLTPro-Regular.otf"> <string>AvenirNextLTPro-Regular</string> </array> <array key="TradeGothicLTPro-BdCn20.otf"> <string>TradeGothicLTPro-BdCn20</string> </array> </customFonts>