44

我想在我的 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" size:12] 来获取它时,我只是得到了 HelveticaNeue-Light..

我没有收到任何错误或警告。请帮忙!

4

17 回答 17

106

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

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

确保它是:

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

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

于 2012-05-03T11:40:45.000 回答
19

我认为您遇到了与我相同的问题:iOS 中存在一个错误,它无法使用来自同一家族的超过 2 种字体。

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

于 2011-08-11T08:40:49.720 回答
10

在捆绑 “应用程序提供的字体”属性中添加字体文件后,单击下拉箭头并输入带有扩展名的字体名称

于 2013-10-07T06:19:02.423 回答
10

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

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

我在以下位置找到了这个有用的教程:与 Chris 一起编写代码

于 2015-05-19T13:03:03.850 回答
8

打开字体书应用程序。如果您自己安装了字体,请转到用户,查找您想要的字体并在您的 xcode 项目中使用字体的 PostScript 名称。

它甚至应该适用于同一家族的不同字体变体。

于 2013-04-10T15:40:14.103 回答
3

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

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

于 2012-01-27T17:18:53.503 回答
2

试试这个,这对你也很有帮助。

    [compete_Label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];
于 2012-05-03T11:46:59.580 回答
2

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

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

那是造成问题的原因。然后我从Finder中双击字体文件以查看字体的预览。那时我注意到预览窗口中的字体名称为BonvenoCF。所以我在代码中添加了这个名字,比如

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

像魅力一样工作!我的应用程序中没有这种可爱的字体就活不下去。

于 2016-06-14T15:42:12.393 回答
1

尝试使用空格:

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

请参阅某些字体未显示?

于 2011-07-08T22:50:25.153 回答
1

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

于 2011-07-14T13:36:59.260 回答
1
  1. Drag your font files (.ttf or .otf) into project's bundle.
  2. Then select all those fonts > on your xcode's right panel make sure the Target membership is enabled.
  3. Select project from the navigator panel > select Build phases > under Copy Bundle Resources verify all your fonts are listed. If not, add one by one using + icon.
  4. Info.plist > select Fonts provided by application > add your fonts one by one (e.g., Helvetica-Bold.ttf).
于 2020-04-20T15:27:21.600 回答
0

为了在 iOS 中使用自定义字体,只需将字体拖放到项目中即可。在 Info.plist 中使用“应用程序提供的字体”键提及带有扩展名的字体名称数组。然后使用以下代码打印所有字体系列名称:

for (NSString* family in [UIFont familyNames])

{

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

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

控制台打印:

Arial 希伯来语 ArialHebrew-Bold ArialHebrew-Light ArialHebrew

Calibri Calibri-Bold Calibri

Georgia Georgia-BoldItalic Georgia-Bold Georgia-斜体 Georgia

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

在核心文本中:

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

在 UIKit 中:

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

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

于 2016-02-04T10:21:39.170 回答
0

此外:

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

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

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

        UIFont.familyNames.forEach { (name) in
        print(name)
    }
于 2018-11-06T10:36:27.327 回答
0

另一件要检查的事情是在 Mac 上:打开应用程序 Font Book。然后去文件-> 文件验证并打开字体。如果那里出现问题(即使有警告),iOS 通常会拒绝在应用程序中加载字体而没有错误。

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

于 2018-11-20T03:43:06.527 回答
0

除了很好解释的@Ben 答案之外,如果您仍然没有获得字体,只需使用或将您的字体分配给您的任何Label一个Storyboard,您将开始使用此代码获取它

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

po [UIFont fontWithName:@" FontRegular " size:11];

或者

po [UIFont fontWithName:@" Font Regular " size:11];

或者

po [UIFont fontWithName:@" Font-Regular " size:11];

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

于 2018-11-26T10:49:58.597 回答
0

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

于 2019-12-25T07:21:06.040 回答
0

这是一个老问题,但我想强调的是,我们必须将字体文件名 WITH EXTENSION 写入 info.plist。这尤其是我的错误:我错过了扩展。但非常有趣的一点是,iOS 成功加载了三种字体,即使在错过了扩展程序的情况下也是如此。一旦我添加了扩展,所有 12 种字体都已加载。

Good article: https://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/

于 2019-12-28T08:30:46.540 回答