iOS中的自定义字体不起作用

2020/12/17 02:11 · ios ·  · 0评论

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

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

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

有时(以我为例),在Xcode中拖放“ .ttf”文件时,未选中“添加到目标”。这意味着该文件实际上在您的项目中可见,但是未嵌入到应用程序中。

确保是:

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

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

我认为您遇到了同样的问题:iOS中存在一个错误,即它不能使用同一家族中的两种以上字体。

有关详细信息和解决方案,请参见此处的博客文章:http : //www.pixeldock.com/blog/uifont-problem-when-using-more-than-2-custom-fonts-of-the-same-font-family/

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

它正在处理相同字体的不同变体(即使在IOS 8中也是如此)。万一有人遇到相同的问题,我将发布我的错误...我使用的是字体的文件名而不是字体名称。一个有用的解决方案是打印所有可用字体,然后查找我正在使用的字体。在Swift中将是:

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

我在以下地方找到了这个有用的教程:与Chris一起编码

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

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

尽管这可能对OP没有帮助,但对其他人可能有用。

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

试试这个,这对您也很有益。

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

尝试空格:

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

请参阅某些字体未显示?

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

花了几个小时后,我才知道我们需要添加的字体名称不是字体的文件名,而是实际的字体名称。我试图包含字体文件bonveno.ttf我在info.plist中包括了文件名和扩展名,并且能够在“复制捆绑资源”列表中看到字体我的代码就像

self.label.font = [UIFont fontWithName:@"bonveno" size:30];

那是造成问题的原因。然后,我双击Finder中的字体文件以查看字体的预览。那个时候,我注意到预览窗口中的字体名称为BonvenoCF所以我在代码中添加了该名称,例如

self.label.font = [UIFont fontWithName:@"BonvenoCF" size:30];

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

为了在iOS中使用自定义字体,只需通过拖放将字体添加到项目中。使用键“应用程序提供的字体”在Info.plist中提及扩展名的字体名称数组。然后使用以下代码打印所有字体系列名称:

for (NSString* family in [UIFont familyNames])

{

    DebugLog(@"FONT FAMILY: %@", family);

    for (NSString *name in [UIFont fontNamesForFamilyName: family])
    {
        DebugLog(@"  %@", name);
    }
}

控制台打印:

Arial Hebrew
ArialHebrew-Bold ArialHebrew-Light ArialHebrew

Calibri
Calibri-Bold Calibri

格鲁吉亚
Georgia-BoldItalic Georgia-Bold Georgia-Italic Georgia

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

在核心文字中:

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

在UIKit中:

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

注意:此处fontName = @“ Calibri-Bold”没有扩展名。

此外:

  • 将字体文件名添加到“应用程序提供的字体”下的info.plist中
  • 将实际文件添加到项目中。

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

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

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

要检查的另一件事是在Mac上:打开应用程序“字体簿”。然后转到文件->文件验证并打开字体。如果该处出现故障(即使有警告),iOS通常会拒绝将字体正确加载到应用程序中。

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

除了解释清楚的@Ben答案之外,如果您仍然没有获得字体,只需使用或将字体分配给其中任何Label一种,Storyboard就可以使用以下代码开始获得它

如果仍然无法使用获取字体[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

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

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

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

  1. 将字体文件(.ttf或.otf)拖到项目的包中。
  2. 然后选择所有那些字体>在xcode的右面板上,检查是否Target membership已启用(如果未启用)。
  3. 从导航器中选择项目>选择Build phases>Copy Bundle Resources验证所有字体都在下面。如果没有,请使用+图标一一添加
  4. Info.plist>选择Fonts provided by application>将字体一一添加Helvetica-Bold.ttf
本文地址:http://ios.askforanswer.com/ioszhongdezidingyizitibuqizuoyong.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!