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

102

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

文件名为“ProximaNova-Regular.otf”,要加载该字体,我只是使用了...

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

这个运作得非常完美。

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

Dude_Willie.otf
Impact
handsean.ttf

但我不确定如何加载它们。

我已经尝试过

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

但这只是回到使用Helvetica的问题。

我该如何找到要使用的名称?


可能是 iPhone 上的非系统字体名称 的重复问题。 - borrrden
@FyodorVolchyok 啊,看看评论。我已经忽略了那个问题。我遇到的问题是项目中我没有正确安装字体,所以列出 familyNames 并没有显示我要查找的字体。 - Fogmeister
fc-scan --format "%{foundry}: %{family}\n" filename.ttffilename.otf. - Dave Jarvis
15个回答

3

Swift 1.2:

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

3

另一个“快速实用”的技巧,不需要扫描模拟器或设备上存在的所有默认字体,是在你的storyboard中使用字体。然后,如果你使用文本编辑器(以源代码形式打开)编辑storyboard,你可以搜索“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>

1

记录字体文件的familyNames,然后访问这些字体:

// You can log all font family names suing **fontNamesForFamilyName**

NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);

希望它能帮到你。

似乎对我们无效 - 如果文件名与字体族名称不同,则会失败。 - Blitz
你应该在“获取信息”中获取字体名称。 - Nishant Tyagi

0

使用 Swift 4.1 列出 macOS 的字体名称和家族:

NSFontManager.shared.availableFonts.map { print($0) }
NSFontManager.shared.availableFontFamilies.map { print($0) }

-2

支持Swift 4.0

这只是一行代码,用于打印所有字体系列及其字体名称。

override func viewDidLoad() {
    super.viewDidLoad()
    //Main line of code
    UIFont.familyNames.sorted().forEach({ print($0); UIFont.fontNames(forFamilyName: $0 as String).forEach({print($0)})})
}

阅读问题。 - Fogmeister
@Fogmeister,你的被接受的答案和这个一样,所以我用更短的方式写了这段代码。 - NiravS
这行代码读取ttf或otf文件,然后提供字体系列和所有字体名称。@Fogmeister - NiravS
如果已经有一个与你的答案相同的被接受的答案,那你为什么还要写这个呢?直接编辑已经存在的那个答案就好了(这就是编辑按钮的作用)。不要试图通过复制粘贴他人的答案并进行微小、无关紧要的更改来窃取他们的声望分数。我现在已经将被接受的问题更改为一个更近期的问题,以展示如何正确安装字体。谢谢。 - Fogmeister
此外,你的答案虽然只有“一行代码”,但是它几乎无法阅读。我更喜欢有多行代码的答案,这样可以轻松地扫描并了解它正在做什么。 - Fogmeister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接