12

我正在尝试在 Xcode 4.2 中为我的项目添加自定义字体,但每当我尝试使用它时,我都会收到一个错误,即对象为 nil。

我已经完成了以下操作:
1)在我的 .plist '应用程序提供的字体'值中添加了一行:“LCDMono2 Ultra.ttf”
2)将字体添加到我的支持文件并在 XCode 中显示以验证它是否已添加。
3) 使用 Get Info 验证全名是“LCDMono2 Ultra”
4) 在我的项目中创建字体:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16];

我试过这个变种:

UIFont *myFont = [UIFont fontWithName:@"LCDMono2 Ultra" size:16.f];

5)尝试使用字体名称(addObject:myFont.fontName),产生'nil'错误。

什么可能导致错误?会不会是名字中的空格之类的东西?

4

7 回答 7

13

将字体添加到项目后,会自动删除字体全名中的空格。我检查了原始字体文件,空格在那里,所以Apple一定不想处理空格。我将引用更改为“LCDMono2Ultra”并且它可以工作。

于 2012-01-31T22:48:44.567 回答
13

我在几个小时内遇到了同样的问题,并尝试了以上所有方法,但都没有奏效,字体被添加到应该在的任何地方,我什至尝试了在其他应用程序中有效的字体,但似乎从未添加到这个应用程序中.

在 Xcode 5 中似乎发生了一些变化,必须将字体添加到 info 选项卡下的目标属性中才能正常工作,而以前它们必须添加到“appName-info.plist”中,见下图:

希望这对其他人有帮助。

在此处输入图像描述

于 2013-12-02T17:03:50.137 回答
3

就我而言,我需要从字体名称中删除所有额外的连字符,除了字体粗细之前的那个:

    UIFont(name: "SF-Pro-Display-Semibold", size: 15) // fails
    UIFont(name: "SFProDisplay-Semibold", size: 15) // succeeds
于 2019-05-15T21:22:02.657 回答
2

您是否设置了断点并检查是否为 myFont 获取了有效的 UIFont 对象。这是值得检查的,因为问题很可能是“LCDMono2 Ultra”实际上是字体系列名称,而您想要使用的是“LCDMono2 Ultra-normal”或“LCDMono2 Ultra-bold”之类的东西。使用 Font Book 打开您的 .ttf 并查看它为您提供的信息。

或者,如果您在 Font Book 中找不到任何内容,您可以尝试调用:

NSArray *fonts = [UIFont fontNamesForFamilyName:"LCDMono2 Ultra"];

然后只需在调试器中打印数组字体以检查它们应该是什么。

希望这有帮助,如果这不起作用,请告诉我,我会尝试考虑其他事情:)

于 2012-01-28T17:27:50.263 回答
1

找到您的字体(可能使用其他名称)并使用此名称。

    for (NSString *familyName in [UIFont familyNames]) {
        for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
            NSLog(@"%@", fontName);
        }
    }
于 2017-04-04T09:14:38.177 回答
1

我的字体文件是“Futura Heavy.ttf”,然后我用-下面的空格替换它就可以了!

    class func futuraHeavy() -> UIFont {
        return UIFont(name: "Futura-Heavy", size: 12)!
    }
于 2017-08-09T14:54:01.683 回答
0

确保在 plist “应用程序提供的字体”中包含字体的文件扩展名作为名称的一部分。

于 2019-02-27T16:16:48.633 回答