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

Fog*_*ter 76 uifont ios

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

文件名是"ProximaNova-Regular.otf"并加载我刚使用的字体...

[UIFont fontWithName:@"ProximaNova-Regular" size:20];
Run Code Online (Sandbox Code Playgroud)

这非常有效.

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

Dude_Willie.otf
Impact
handsean.ttf
Run Code Online (Sandbox Code Playgroud)

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

我试过了

[UIFont fontWithName:<the file name> size:20];
Run Code Online (Sandbox Code Playgroud)

但这只是回到使用Helvetica.

如何找到要使用的名称?

Seg*_*gev 117

右键单击TTF - >获取信息

"全名"是您正在寻找的.

这对TTF来说对我有用.

编辑:

我刚才使用的字体与Get Info中的"Full Name"名称不同.

要编译此答案,如果上面的快速检查不起作用,请在项目中运行此代码:

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

并搜索要使用的字体的正确名称.

Swift 3.0代码:

for fontFamilyName in UIFont.familyNames{
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
        print("Family: \(fontFamilyName)     Font: \(fontName)")
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于所有字体.例如,当代码中的系列为"ProximaNova-Regular"时,"全名"值显示为"Proxima Nova Regular" (6认同)
  • 谢谢,这在我在info.plist文件中正确安装字体后起作用了. (3认同)

Joh*_*cko 66

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

  • your_new_font.ttfyour_new_font.otf添加到Xcode项目中
  • 在项目的info.plist中,将your_new_font.ttfyour_new_font.otf的新条目添加到UIAppFonts数组中(此文本的纯文本为"应用程序提供的字体")
  • 此时,我建议添加此临时调试代码块以转储应用程序可访问的所有字体,包括新添加的your_new_font:
    for family: String in UIFont.familyNames {
        print("\(family)")
        for names: String in UIFont.fontNames(forFamilyName: family) {
            print("== \(names)")
        }
    }
Run Code Online (Sandbox Code Playgroud)
  • 在调试输出中,查找新字体的"family"和"font"名称.通过任何显示为与您的新字体系列相对应的"字体"名称(可能有多个"字体"与您的新字体'系列'相关联)UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20]并且您应该开展业务!


小智 46

  • 安装字体
  • 在Mac上打开Font Book应用程序
  • 选择字体并单击"信息"按钮
  • 您正在寻找的名称是PostScript名称

例

  • fwiw,我需要去查看>显示字体信息以查看详细信息.不确定为什么它在我的机器上默认关闭. (5认同)
  • 似乎是最简单的方法 (4认同)

rad*_*ual 32

要在iOS中使用字体,您必须根据字体的全名(PostScript名称)加载字体,该字体有时(通常是)与字体的实际文件名不同.

想象一下,自己将字体文件"Arial-regular.ttf"重命名为"foo.ttf".刚刚重命名的字体文件中包含的字体仍然是"Arial-regular".

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

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

for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done
Run Code Online (Sandbox Code Playgroud)

以下是在我的~/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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这比AppDelegate.m文件中的复制粘贴代码快一点,以便在每次要添加新字体文件时打印出名称,这是一种流行的方法,并且它比在FontBook中打开字体要快得多检查PostScript名称.

有用的提示:如果您在终端中使用上述脚本的别名,那么您只需输入一个命令即可获取当前目录中所有文件的所有PostScript字体名称(我的函数被调用,fontnames所以我只需要做是fontnames在目录中的终端类型,其中包含字体,PostScript名称将自动打印,然后您将节省开发工作流程的时间,并在您需要时准备好使用这个方便的脚本.

希望这可以帮助!

  • 你也可以通过[homebrew](https://brew.sh/)安装fontConfig:`brew install fontconfig`. (3认同)

Arp*_*tha 6

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

  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]);
        }
  }
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助你......


小智 5

Swift 3.0

for familyName in UIFont.familyNames {
        for fontName in UIFont.fontNames(forFamilyName: familyName ) {
            print("\(familyName) : \(fontName)")
        }
    }
Run Code Online (Sandbox Code Playgroud)


Rob*_*ert 5

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

import Foundation

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")
    }

    guard let font = CGFont(provider) else {
        throw Error("Could not load font")
    }

    guard let name = font.postScriptName else {
        throw Error("Could not get font name from font file")
    }

    return name as String
}
Run Code Online (Sandbox Code Playgroud)

Error根据需要替换为自己的可抛对象。


Jar*_*edH 5

Swift 4.0+解决方案

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

        for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) {
            print("font: \(fontName)")
        }
    }
Run Code Online (Sandbox Code Playgroud)

将输出:

家庭:Apple SD Gothic Neo

字体:AppleSDGothicNeo-Thin

字体:AppleSDGothicNeo-Light