Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 自定义字体的UIFont失败,为零_Iphone_Objective C_Uifont_Custom Font - Fatal编程技术网

Iphone 自定义字体的UIFont失败,为零

Iphone 自定义字体的UIFont失败,为零,iphone,objective-c,uifont,custom-font,Iphone,Objective C,Uifont,Custom Font,我试图在Xcode 4.2中将自定义字体添加到我的项目中,但每当我尝试使用它时,我都会得到一个错误,即对象为零 我已经做了以下工作: 1) 在my.plist“应用程序提供的字体”值中添加了一行:“LCDMono2 Ultra.ttf” 2) 将字体添加到我的支持文件中,并在XCode中显示,以验证是否添加了该字体。 3) 使用Get Info验证全名为“LCDMono2 Ultra” 4) 在我的项目中使用创建字体: UIFont *myFont = [UIFont fontWithName:

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

我已经做了以下工作:
1) 在my.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”
错误


是什么导致了错误?它可能与名称中的空格类似吗?

是否已设置断点并检查是否为myFont获取了有效的UIFont对象。这是值得检查的,因为最有可能的问题是“LCDMono2 Ultra”实际上是字体系列名称,您要使用的是类似“LCDMono2 Ultra normal”或“LCDMono2 Ultra bold”的内容。用字体书打开你的.ttf,看看它给了你什么信息

或者,如果在字体手册中找不到任何内容,您可以尝试拨打:

NSArray *fonts = [UIFont fontNamesForFamilyName:"LCDMono2 Ultra"];
然后在调试器中打印数组字体以检查它们应该是什么


希望对您有所帮助,如果这不起作用,请告诉我,我将尝试考虑其他事项:)

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

我有几个小时都遇到了同样的问题,尝试了上述所有方法,但都没有成功,字体被添加到了它应该添加的任何地方,我甚至尝试了其他应用程序中使用的字体,但似乎从未添加到这个应用程序中

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

希望这对其他人有帮助

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

    for (NSString *familyName in [UIFont familyNames]) {
        for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
            NSLog(@"%@", fontName);
        }
    }
我的字体文件是“Futura Heavy.ttf”,然后我用
-
替换了下面的空格,这样就可以了

    class func futuraHeavy() -> UIFont {
        return UIFont(name: "Futura-Heavy", size: 12)!
    }

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

在我的情况下,我需要删除字体名称中所有额外的连字符,除了字体重量前的一个:

    UIFont(name: "SF-Pro-Display-Semibold", size: 15) // fails
    UIFont(name: "SFProDisplay-Semibold", size: 15) // succeeds

使用
[UIFont familyNames]
查看您的字体是否真的被操作系统“看到”。这至少可以缩小范围。我有很多种iOS无法识别的字体文件。@smparkes-我在阅读您的回复之前就这样做了!果然,Xcode会自动删除空格,名称显示为“LCDMono2Ultra”“而且有效。不是一直都是这样吗?谢谢。可能不是Xcode。这可能就是字体文件中字体名称的编码方式。一个小小的免费提示:iOS只允许您从一个族中加载两个面,因此如果您从一个族中使用两个以上的面,则需要将每个面上的族名称更改为唯一。这花了一段时间才找到答案…谢谢,但我找到了解决方案-请参阅我上面的评论。这不是“不想处理空格”,我相信它使用的是字体的PostScript名称。David Dunham是正确的。一般来说,如果要在代码中对字体名称进行硬编码,则应始终使用完整的PostScript名称来引用字体。(PostScript名称本身不允许使用空格)。如果您不确定它是什么,请使用字体手册在Mac电脑上安装字体,然后在字体手册中选择
预览>显示字体信息
以显示各种名称,包括PostScript名称。“LCDMono2 Ultra”的后缀名是
LCDMono2 Ultra
。是的,你说得对。我没有在我的系统上安装字体,所以我无法从字体手册中获取该信息。安装后,我可以看到Postscript名称。谢谢,谢谢-我不明白这里发生了什么。有一个系统字体,但iOS正在寻找没有空格的字符串。重要提示:添加整个文件名和扩展名。