在Objective-C中设置自定义字体

4

你好,

我正在尝试为我的标签设置字体,但是当我运行应用程序时,它在我的iOS模拟器中并没有出现。

_textLabel1 = [[UILabel alloc] initWithFrame:CGRectMake((CGFloat) (self.view.center.x - (self.view.bounds.size.width / textWidth / 2)),
            (CGFloat) (self.view.center.y * textPositionY), (CGFloat) (self.view.bounds.size.width / textWidth), (CGFloat) textHeight)];
_textLabel1.numberOfLines = 0;
_textLabel1.textAlignment = NSTextAlignmentCenter;
_textLabel1.textColor = clr;
_textLabel1.text = @"Favoriten";
[_textLabel1 setFont:[UIFont fontWithName:@"assets/fonts/Kingthings_Trypewriter_2.ttf" size:36]];
[_favouriteViewer addSubview:_textLabel1];
_textLabel1.font=[_textLabel1.font fontWithSize:25];

我也在我的plist文件中添加了自定义字体:
<key>UIAppFonts</key>
<array>
    <string>Kingthings_Trypewriter_2.ttf</string>
</array>

我把自定义字体保存在命名的资源文件夹中,并在以下位置进行了调用:

[_textLabel1 setFont:[UIFont fontWithName:@"assets/fonts/Kingthings_Trypewriter_2.ttf" size:36]];

模拟器中没有显示字体。

感谢您的帮助!

编辑:我正在使用AppCode,而不是Xcode。

编辑2:

感谢Ganesh Somani的代码,我已经尝试通过复制捆绑资源来查找我的字体是否正确添加到项目中,但不幸的是它仍然没有在日志中显示。

for(NSString *fontfamilyname in [UIFont familyNames])
{
    NSLog(@"Family:'%@'",fontfamilyname);
    for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname])
{
    NSLog(@"\tfont:'%@'",fontName);
}
NSLog(@"---");
}

解决方案: 由于某种原因,我的项目中有两个.plist文件。我加入了下面的代码,现在就可以正常工作了:
<key>UIAppFonts</key>
<array>
    <string>"fontName.ttf"</string>
</array>

感谢所有为此提供帮助的贡献者!

你尝试过只使用[UIFont fontWithName:@"Kingthings_Trypewriter_2" size:36]吗? - Vin
1
首先,你的字体名称是什么?它很少与精确文件名相同,因为它绝对不是带路径的文件名...所以你可能需要先找到字体名称。 - holex
@Vancore 我在我的之前的帖子中已经回答了同样的问题。请查看一下,它肯定会对你有所帮助。 - Dipen Panchasara
@Vin 我试过了,但好像不起作用。 - Vancore
@holex 我该如何找到字体名称?我尝试了这个,但“Kingsthings”不会显示出来:for (NSString *fontfamilyname in [UIFont familyNames]) { NSLog(@"Family:'%@'", fontfamilyname); for (NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) { NSLog(@"\tfont:'%@'", fontName); } NSLog(@"~~~~~~~~"); } - Vancore
显示剩余5条评论
4个回答

14
只需将字体文件导入项目中:

import files

然后将它们添加到您的 Info.plist 文件中:

plist file

然后就可以在代码中使用它们了:

enter image description here

确保使用正确的名称,在字体应用程序中(双击并安装字体后,您可以查看此信息),单击 CMD + i,并检查字体的 "PostScript 名称",这是您将如何调用它。

enter image description here

在 Xcode 中打开您的项目,点击项目图标,选择目标,然后选择 Build Phases,进入“Copy bundle resources”部分,检查您的字体是否在那里(请记住需要将其添加到项目文件夹中):

enter image description here


谢谢回复!我忘了提到我只使用AppCode,我不太喜欢XCode。我的字体菜单(我对Mac相对较新)看起来有点不同,我找不到我的字体的PostScript名称。我会尝试添加一张截图。 - Vancore
我在Xcode中打开了我的项目,似乎已经添加到了我的plist文件中:http://www.directupload.net/file/d/4111/plifkr8l_png.htm - Vancore
抱歉打扰了,我现在找到了真正的名称... KingthingsTrypewriter2。但仍然不起作用。[_textLabel1 setFont:[UIFont fontWithName:@"KingthingsTrypewriter2" size:36]]; _textLabel1.font = [UIFont fontWithName:@"KingthingsTrypewriter2" size:36]; - Vancore
你是否将字体添加到项目文件夹中?尝试删除模拟器上的应用程序,清除构建并重新安装。还要查看我所做的最后一次编辑。 - Roberto Ferraz
我已经添加了字体,你可以在这张图片中看到: http://www.directupload.net/file/d/4112/sik6j58p_png.htm所以它在我的文件夹和plist文件中,但仍然无法工作。 - Vancore
显示剩余2条评论

2

自定义字体有时候会让人头疼。

我曾经遇到过同样的问题,但是是在标签方面。

这个答案解决了我的问题。也许对你有所帮助。

同时,我还发现了一篇非常好的文章,介绍了如何将自定义字体添加到iOS应用程序中:链接

编辑

另外一个可能性是您没有使用正确的字体名称,而是使用了文件名。

请使用以下代码查找真实名称:

for(NSString *fontfamilyname in [UIFont familyNames])
{
    NSLog(@"Family:'%@'",fontfamilyname);
    for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname])
    {
        NSLog(@"\tfont:'%@'",fontName);
    }
    NSLog(@"---");
}

答案仅包含链接可能不够好。最好解释一下OP错过了什么或者做出评论。 - WangYudong
@GaneshSomani,这也是我尝试过的方法,但我的自定义字体不在列表中。我该怎么办? - Vancore
你检查过“Build Phases”->“Copy Bundle Resources”了吗? - Ganesh Somani
你是指这个吗:http://www.directupload.net/file/d/4111/plifkr8l_png.htm非常感谢回复!抱歉我忘记提到我使用的是AppCode。 - Vancore
很抱歉,我不确定AppCode的界面是什么样子的。但应该是你设置非ARC代码标志的地方... 我会在有时间的时候添加一张截图。 - Ganesh Somani

0

除了@Roberto answer中所解释的,如果您仍然无法获取您的字体,请使用或分配您的字体到任何一个Storyboard中的Label,您将开始使用this code来获取它。

如果您仍然无法使用[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


0
如果你正在使用Objective-C,那么可以使用以下循环来显示字体系列:
for(int i =0; i < UIFont.familyNames.count; i++){
    NSString *myFontName = [UIFont.familyNames objectAtIndex:i];
    NSLog(@"here myFontFamily is %@",myFontName);
    for (int j = 0; j < [UIFont fontNamesForFamilyName:myFontName].count; j++){
        NSLog(@" here the font is %@",[[UIFont fontNamesForFamilyName:myFontName]objectAtIndex:j]);
    }
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接