如何在iPhone SDK中包含和使用新字体?

mee*_*tpd 60 iphone cocoa-touch objective-c iphone-sdk-3.0 ios4

我想在我的iPhone应用程序中使用字体"MgOpen Modata".但我没有在属性检查器的字体列表中看到它.

如何包含该字体以便我可以使用它?

Jil*_*ouc 150

  1. 将字体文件添加到资源文件中
  2. 编辑您的Info.plist:使用密钥添加新条目Fonts provided by application.
  3. 对于每个文件,将文件名添加到此数组

在下面的例子中,我添加了字体"DejaVu Sans Mono":

Info.plist:添加自定义字体

在您的应用程序中,您可以使用[UIFont fontWithName:@"DejaVuSansMono-Bold" size:14.f].

或者如果你想在html/css中使用它,只需使用 font-family:DejaVu Sans Mono;

注意:这在iOS 3.2及更高版本中可用.

  • 不要忘记在Build-Phases - > Copy Bundle Resources中添加字体 (17认同)
  • 对所有人:请注意,fontwithName不得包含扩展名DejaVuSansMono-Bold.TTF,我已多次做过这个错误.所以. (9认同)
  • 如果你对上述内容有任何疑问,请看看这个很棒的教程:http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ (2认同)

sim*_*ley 14

我发现这次演练是最好的

虽然上面接受的答案确实有效,但我发现如果你将文本添加到XIB文件然后将字体设置为我们的新字体,那么文本就不会更新.

确保新字体包含在资源中修复此问题(直接从演练中获取):

"这不应该是一个问题,但有时当你无法显示你的字体时,这可能是一个令人头痛的问题,所以现在让我们仔细检查,以排除它作为一个潜在的陷阱.

通过在解决方案资源管理器中突出显示XCode项目文件,转到项目"构建阶段"窗格,然后在右侧选择"构建阶段".您将看到可以扩展的部分之一是"复制捆绑资源".打开该列表,确保您的字体包含在该列表中."

确保字体包含在我们的资源中

演练中的其他内容是相同类型的东西(将文件添加到项目和plist文件中)

所有这些都归功于克里斯代码这个答案,这为我节省了大量的时间和精力,我只是从他的页面复制一个镜头,让这个答案自立,而不是要求你点击链接.


Vai*_*ran 6

大多数时候我们忘记将字体添加到应用程序Target.确保你没有忘记这一重要步骤.注意右侧面板文件检查器>目标成员身份复选框.

在此输入图像描述

此外,您还可以通过在应用上的任何位置运行此代码段来检查是否将wellher字体添加到您的应用程序中.

for (NSString* family in [UIFont familyNames])
{
    NSLog(@"%@", family);

    for (NSString* name in [UIFont fontNamesForFamilyName: family])
    {
        NSLog(@"  %@", name);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

字母顺序:

for (NSString* family in [[UIFont familyNames] sortedArrayUsingSelector:@selector(compare:)])
{
    NSLog(@"%@", family);

    for (NSString* name in [[UIFont fontNamesForFamilyName:family] sortedArrayUsingSelector:@selector(compare:)])
    {
        NSLog(@"  %@", name);
    }
}
Run Code Online (Sandbox Code Playgroud)

这将填充应用程序中可用字体的列表,其中还会显示添加的字体.


小智 6

不要忘记将字体添加到目标编译包资源,方法是转到'目标' - >'构建阶段' - >'复制捆绑资源'并手动添加所有字体


hal*_*ano 6

我认为开发人员将plist结构作为原始源代码更好.我要离开它进行复制/粘贴:

<key>UIAppFonts</key>
    <array>
        <string>Roboto-BoldItalic.ttf</string>
        <string>Roboto-Medium.ttf</string>
        <string>Roboto-MediumItalic.ttf</string>
        <string>Roboto-Regular.ttf</string>
        <string>Roboto-Bold.ttf</string>
    </array>
Run Code Online (Sandbox Code Playgroud)

复制此代码段并将字符串键修改为所需字体.提示:要查看plist作为原始源代码,请单击文件上的辅助按钮,然后选择打开方式 - >源代码.

编辑

// Logs fonts ordered by name
    for (NSString* family in [[UIFont familyNames] sortedArrayUsingSelector:@selector(compare:)])
    {
        NSLog(@"%@", family);

        for (NSString* name in [[UIFont fontNamesForFamilyName:family] sortedArrayUsingSelector:@selector(compare:)])
        {
            NSLog(@"  %@", name);
        }
    }
Run Code Online (Sandbox Code Playgroud)

添加字体后,可以添加到(例如)AppDelegate.m类,以查看真正的字体名称(在包上).我遇到的一个问题是我用错误的名称加载字体,假设字体文件名是正确的.有时它与捆绑实名不同.除此之外,您还可以使用finder(macOS)上的文件信息窗口(cmd + i)检查文件全名.

示例澄清:
文件名="DroidSansEthiopic-Regular"
处理名称在bundle ="Droid Sans Ethiopic"

  • 你列出所有字体的日志代码真的很有帮助。它帮助我发现,出于某种原因,Xcode 真的认为 Roboto Medium 对我不可用——即使它在我的捆绑资源和我的 Info.plist 中。我已经成功添加了 7 种其他字体,但 Roboto Medium 无法使用(甚至尝试了来自不同来源的不同 .ttf 文件)。我难住了。 (2认同)