【问题标题】:Custom Font in ios not workingios中的自定义字体不起作用
【发布时间】:2011-07-08 22:40:39
【问题描述】:

我想在我的 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..

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

【问题讨论】:

    标签: ios iphone cocoa-touch uifont custom-font


    【解决方案1】:

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

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

    为了确保它是:

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

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

    【讨论】:

    • 给出重复资源错误
    【解决方案2】:

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

    详情和解决方法请看这里的博文:http://www.pixeldock.com/blog/uifont-problem-when-using-more-than-2-custom-fonts-of-the-same-font-family/

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        我发现这个有用的教程在:Code with Chris

        【讨论】:

        • 它没有打印我的自定义字体。
        • 这是帮助调试的好方法。我的 Info.plist 中有错字。
        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

                [compete_Label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];
            

            【讨论】:

            • 当我尝试使用自定义字体时返回 nil。
            【解决方案8】:

            花了几个小时后,我才知道我们需要添加的字体的名称不是字体的文件名,而是实际的字体名称。我试图包含字体文件 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];
            

            像魅力一样工作!我的应用中没有这种可爱的字体就无法生存。

            【讨论】:

              【解决方案9】:
              1. 将字体文件(.ttf 或 .otf)拖到项目包中。
              2. 然后选择所有这些字体 > 在您的 xcode 右侧面板上确保 Target membership 已启用。
              3. 从导航面板中选择项目 > 选择Build phases > 在Copy Bundle Resources 下验证所有字体都已列出。如果没有,请使用+ 图标一一添加。
              4. Info.plist > 选择Fonts provided by application > 逐一添加字体(例如,Helvetica-Bold.ttf)。

              【讨论】:

                【解决方案10】:

                试试空格:

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

                Certain fonts not showing up?

                【讨论】:

                • 我尝试了几个空白模式,没有成功...我也看到了链接..谢谢! HelveticaNeue-UltraLightItalic 确实有效,这让我很困扰!
                • 这已经过时了,但我仍然到了这里,所以仅供参考,现在正确的格式是 HelveticaNeue-UltraLight,完整列表请参阅iosfonts.com
                【解决方案11】:

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

                【讨论】:

                • 谨慎推荐从特定网站购买的商品。我可以说在这种情况下这不是广告,但人们在使用付费解决方案回答自己的问题时遇到了麻烦。
                【解决方案12】:

                要在 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 宋体希伯来语

                Calibri Calibri-Bold 口径

                格鲁吉亚 Georgia-BoldItalic 乔治亚-粗体 格鲁吉亚-斜体 格鲁吉亚

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

                在核心文本中:

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

                在 UIKit 中:

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

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

                【讨论】:

                  【解决方案13】:

                  除了:

                  • 将字体文件名添加到 info.plist 下的“Fonts provided by 申请”
                  • 将实际文件添加到项目中。

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

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

                          UIFont.familyNames.forEach { (name) in
                          print(name)
                      }
                  

                  【讨论】:

                    【解决方案14】:

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

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

                    【讨论】:

                      【解决方案15】:

                      除了很好解释的@Ben 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];

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

                      【讨论】:

                        【解决方案16】:

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

                        【讨论】:

                          【解决方案17】:

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

                          好文章: https://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/

                          【讨论】:

                            猜你喜欢
                            • 2012-10-17
                            • 2013-06-06
                            • 1970-01-01
                            • 2013-07-23
                            • 2018-11-23
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多