【问题标题】:Setting custom font in objective-c在objective-c中设置自定义字体
【发布时间】:2015-12-11 09:24:15
【问题描述】:

嗨,

我正在尝试为我的标签设置一种字体,但是当我运行应用程序时它并没有出现在我的 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,我使用他的代码尝试确定我的字体是否通过 Copy Bundle 资源正确添加到项目中,但遗憾的是它仍未显示在日志中。

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]
  • 第一件事。你的字体名称是什么?这很少等于精确的文件名,因为它绝对不是带有路径的文件名......所以您可能需要先找到 font name。跨度>
  • @Vancore 我在previous post 中回答了同样的问题。请检查它,它一定会帮助你。
  • @Vin 我做了,但这似乎不起作用。
  • @holex 如何找到字体名称?我试过了,但是“Kingsthings”不会出现: for (NSString *fontfamilyname in [UIFont familyNames]) { NSLog(@"Family:'%@'", fontfamilyname); for (NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) { NSLog(@"\tfont:'%@'", fontName); } NSLog(@"~~~~~~~~"); }

标签: objective-c fonts simulator custom-font


【解决方案1】:

只需将字体文件导入项目即可:

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

然后你可以在你的代码中使用它们:

确保在字体应用程序中使用正确的名称(单击两次并在计算机中安装字体后,您可以看到此信息)点击 CMD + i,然后检查字体的“PostScript 名称”,即你怎么称呼它。

在 Xcode 上打开您的项目,点击项目图标,选择目标,然后选择 Build Phases,转到 Copy bundle resources 部分并检查您的字体是否存在(请记住,您需要将它们添加到项目文件夹中) :

【讨论】:

  • 感谢您的回复!我忘了说我只使用 AppCode,我不是很喜欢 XCode。我的字体菜单(我对 Mac 比较陌生)看起来有点不同,我找不到我的字体的 PostScript 名称。我会尝试添加截图。
  • 我在 Xcode 中打开了我的项目,它似乎已添加到我的 plist 文件中:directupload.net/file/d/4111/plifkr8l_png.htm
  • 对垃圾邮件感到抱歉,我现在知道了真实姓名... KingthingsTrypewriter2。但仍然无法正常工作。 [_textLabel1 setFont:[UIFont fontWithName:@"KingthingsTrypewriter2" size:36]]; _textLabel1.font = [UIFont fontWithName:@"KingthingsTrypewriter2" size:36];
  • 您是否将字体添加到您的项目文件夹中?尝试删除模拟器的应用程序,清理构建并再次安装.. 另请参阅我所做的最后一次编辑
  • 我添加了您在这张图片中看到的字体:directupload.net/file/d/4112/sik6j58p_png.htm 所以它在我的文件夹 + 在我的 plist 文件中,但仍然不起作用。
【解决方案2】:

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

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

This answer 为我解决了这个问题。也许这对你有帮助。

还发现了一篇关于how to add custom fonts to iOS app 的非常好的文章

编辑

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

使用以下代码查找真实姓名

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

【讨论】:

  • 答案只包含链接可能不够好。最好解释一下 OP 遗漏了什么或者只是制作 cmets。
  • @GaneshSomani 这也是我尝试过的,但我的自定义字体不在列表中。我该怎么办?
  • 您是否检查了“构建阶段”->“复制捆绑资源”?
  • 您的意思是:directupload.net/file/d/4111/plifkr8l_png.htm 非常感谢您的回复!对不起,我忘了提到我使用 AppCode。
  • 很抱歉,我不知道 AppCode 的界面到底是什么样的。但它应该是你为非弧代码设置标志的地方......我会在有时间的时候添加截图
【解决方案3】:

如果您使用的是 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]);
    }
} 

【讨论】:

    【解决方案4】:

    除了很好解释的@Roberto answer,如果你仍然没有得到你的字体,只需在你的Storyboard之一中使用或分配你的字体到任何Label,你将开始使用@987654322 @

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-12
      • 2012-11-22
      • 1970-01-01
      • 2013-12-07
      • 2017-07-08
      • 2020-11-06
      • 2015-11-17
      • 2011-04-15
      • 2013-06-07
      相关资源
      最近更新 更多