ios中的自定义字体不起作用

时间:2011-07-08 22:40:40

标签: ios iphone cocoa-touch uifont custom-font

我想在我的ios应用程序中使用HelveticaNeue-UltraLight。我将字体文件作为资源添加到我的项目中,并在plist文件中添加“由应用程序提供的字体”键。文件名是HelveticaNeue.dfont,我已将其添加到密钥数组中。

当我检查可用字体时,我现在可以看到它......

  NSArray *fonts = [UIFont fontNamesForFamilyName:@"Helvetica Neue"];

for(NSString *string in fonts){
    NSLog(@"%@", string);
}

1-07-08 17:32:57.866 myApp[5159:207] HelveticaNeue-Bold
2011-07-08 17:32:57.866 myApp[5159:207] HelveticaNeue-CondensedBlack
2011-07-08 17:32:57.867 myApp[5159:207] HelveticaNeue-Medium
2011-07-08 17:32:57.867 myApp[5159:207] HelveticaNeue
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-Light
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-CondensedBold
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-LightItalic
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-UltraLightItalic
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-UltraLight // HERE IT IS!
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-BoldItalic
2011-07-08 17:32:57.870 myApp[5159:207] HelveticaNeue-Italic

但是当我尝试使用[UIFont fontWithName:@“HelveticaNeue-UltraLight”尺寸:12]时,我只能得到HelveticaNeue-Light ..

我没有收到任何错误或警告。 求救!

17 个答案:

答案 0 :(得分:99)

不仅需要将文件添加到项目中,还需要将其添加到目标中。

有时(如我的情况),当在Xcode中拖放“.ttf”文件时,不会检查“添加到目标”。这意味着该文件实际上在您的项目中可见,但它没有嵌入到应用程序中。

确保它是:

  • 点击项目名称(左侧窗格)
  • 然后在目标(中间窗格)上
  • 然后“构建阶段”(右窗格中的第三个选项卡)
  • 然后“复制捆绑资源”

您应该会看到该列表中的字体文件。

答案 1 :(得分:19)

我认为你遇到了同样的问题:iOS中存在一个错误,它无法使用同一系列中超过2种字体。

有关详细信息和解决方案,请参阅此处的博文:http://www.pixeldock.com/blog/uifont-problem-when-using-more-than-2-custom-fonts-of-the-same-font-family/

答案 2 :(得分:9)

在Bundle中添加Font文件后

“应用程序提供的字体”属性单击下拉箭头 并输入您的字体名称,扩展名为

答案 3 :(得分:8)

打开Font Book应用程序。如果您自己安装了这些字体,请转到用户,查找所需的字体,并在xcode项目中使用该字体的PostScript名称。

它甚至可以用于同一家族的不同字体变体。

答案 4 :(得分:8)

它使用相同字体的不同变体(即使在IOS 8中)。我会发布我的错误以防有人遇到同样的问题...... 我使用的是font的文件名而不是字体名。 一个有用的解决方案是打印所有可用的字体并查找我正在使用的字体。 在Swift中会是:

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

我在Code with Chris

中找到了这个有用的教程

答案 5 :(得分:3)

虽然这可能对OP没有帮助,但对其他人可能有用。

使用iOS 5时,会自动包含Helvetica Neue;您不必将此自定义字体添加到捆绑包。甚至可以直接从Interface Builder使用该字体系列,这非常方便。

答案 6 :(得分:2)

试试这个对你来说也是一件好事。

    [compete_Label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];

答案 7 :(得分:1)

我最终从第三方购买了字体Helvetica Neue UltraLight,没有任何问题。

答案 8 :(得分:1)

花了好几个小时后,我才知道我们需要添加的字体名称不是字体的文件名,而是实际的字体名称。我试图包含字体文件 bonveno.ttf 。我在info.plist中包含了文件名和扩展名,并且能够在复制包资源列表中看到该字体。我的代码就像

self.label.font = [UIFont fontWithName:@"bonveno" size:30];

导致了这个问题。然后我双击 Finder 中的字体文件以查看字体的预览。那次我在预览窗口中注意到字体的名称为 BonvenoCF 。所以我在代码中添加了这个名称,如

self.label.font = [UIFont fontWithName:@"BonvenoCF" size:30];

像魅力一样工作!在我的应用中没有这个可爱的字体就无法生存。

答案 9 :(得分:1)

尝试使用空格:

[UIFont fontWithName:@"Helvetica Neue UltraLight" size:12];

请参阅Certain fonts not showing up?

答案 10 :(得分:0)

要在iOS中使用自定义字体,只需通过拖放操作添加字体即可。放到你的项目。在Info.plist中提及带有扩展名的字体名称数组,其中包含“应用程序提供的字体”。然后使用以下代码打印所有字体系列名称:

for (NSString* family in [UIFont familyNames])

{

    DebugLog(@"FONT FAMILY: %@", family);

    for (NSString *name in [UIFont fontNamesForFamilyName: family])
    {
        DebugLog(@"  %@", name);
    }
}

控制台打印:

Arial Hebrew ArialHebrew粗体 ArialHebrew光强 ArialHebrew

<强>宋体 宋体粗体 宋体

<强>格鲁吉亚  佐治亚BOLDITALIC  格鲁吉亚粗体  格鲁吉亚斜体  佐治亚

然后从控制台,您将获得实际的字体名称(如上所述)。使用下面的代码创建字体 -

核心文字:

CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName, fontSize, NULL);

在UIKit:

UIFont *font = [UIFont fontWithName:fontName size:10];

注意:这里fontName = @“Calibri-Bold”没有扩展名。

答案 11 :(得分:0)

除了:

  • 将字体文件名添加到“。提供的字体 应用程序”
  • 将实际文件添加到项目中。

您还必须确保在 Targets-> Build Phases-> Copy Bundle Resources 下具有自定义字体的实际文件名

要检查它们是否已出现,可以执行以下操作:

        UIFont.familyNames.forEach { (name) in
        print(name)
    }

答案 12 :(得分:0)

要检查的另一件事是在Mac上:打开应用程序“字体簿”。然后转到文件->文件验证并打开字体。如果那里出现故障(即使有警告),iOS通常会拒绝将字体正确加载到应用程序中。

在这种情况下,您可以通过在名为“ Typelight”的免费应用中打开字体并重新保存“另存为”字体来修复错误。

答案 13 :(得分:0)

除了详细解释的@Ben answer之外,如果您仍然没有获得字体,只需使用或将字体分配给Label之一中的任何Storyboard字体,您将开始使用this code

如果仍然无法使用[UIFont fontWithName:@"Font-Regular" size:11];获得字体,则命名中肯定有问题。在调试器中的任何断点处停止并使用不同的名称对其进行调试,然后查看哪个po打印的对象不是nil

  

po [UIFont fontWithName:@“ FontRegular ” size:11];

  

po [UIFont fontWithName:@“ 字体常规 ”大小:11];

  

po [UIFont fontWithName:@“ 字体常规 ”大小:11];

您将获得<UICTFont: 0x7fe2044021d0> font-family: "Interstate-Regular"; font-weight: normal; font-style: normal; font-size: 11.00pt的实际字体名称,否则将获得nil

答案 14 :(得分:0)

请注意,在应用程序名称提供的每种字体的末尾添加 .ttf

答案 15 :(得分:0)

这是一个古老的问题,但我想强调一点,我们必须将字体文件名称WITH EXTENSION写入info.plist。 特别是我的错误:我错过了扩展程序。但有趣的是,即使错过了扩展名,iOS仍成功加载了三种字体。 添加扩展名后,所有12种字体均已加载。

好文章: https://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/

答案 16 :(得分:0)

  1. 将字体文件(.ttf或.otf)拖放到项目的包中。
  2. 然后选择所有那些字体>在xcode的右侧面板上,检查Target membership是否已启用(如果未启用)。
  3. 从导航器中选择项目>选择Build phases下的Copy Bundle Resources>验证是否列出了所有字体。如果不是,请使用+图标一个接一个地添加。
  4. Info.plist>选择Fonts provided by application>以Helvetica-Bold.ttf的形式添加字体。