自定义字体仅在Interface Builder中设置时可用

时间:2015-07-15 23:34:44

标签: ios fonts

我在项目中添加了自定义字体。 它包含在目标中,并添加到plist中。 当我尝试以编程方式使用它时它不起作用,并且当我打印出可用字体列表时它不会显示。 但是,它确实显示为Interface Builder中的一个选项,如果我在IB中将标签的文本设置为该字体,它将正常工作并在我打印出可用字体列表时显示。 这是XCode 6.4和iOS 8.0

当它通过IB工作时,它会以字体名称打印出来,如下所示:  特别精英    SpecialElite正规

我以编程方式调用字体: [UIFont fontWithName:@“SpecialElite-Regular”size:fontSize];

使用内置字体执行此操作时没有任何问题。

6 个答案:

答案 0 :(得分:2)

  

当我尝试以编程方式使用它时它不起作用,并且当我打印出可用字体列表时它不显示

这证明您实际上已将正确地包含在目标和 Info.plist 中。

似乎在IB中工作的原因是该字体在您的计算机上也存在 。但事实上,如果您要在设备上运行此应用程序,您会发现即使在IB中设置字体也无效。

您的字体是特殊精英。正如您所看到的,我在运行的应用程序中可以看到它:

enter image description here

以下是我使用的代码:

    let lab = UILabel()
    lab.text = "This is a test"
    lab.font = UIFont(name:"SpecialElite-Regular", size:18)
    lab.sizeToFit()
    lab.frame.origin = CGPointMake(100,100)
    self.view.addSubview(lab)

所以你看, 可以在代码中引用这个字体 - 如果正确加载。你显然没有正确加载它。它不在你的应用程序包中,或者它不在复制构建阶段,或者它未正确列在 Info.plist 中。

(当然,您可能会使用名称或大小的错误值来调用[UIFont fontWithName:size:]。)

答案 1 :(得分:1)

好的,主题很老但我想在这里投入两分钱。

首先,请阅读这篇文章http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/

简而言之:

  1. 请记住将您的字体包含在项目中
  2. 设置字体目标
  3. 检查您的字体是否作为资源包含在
  4. 将自定义字体添加到plist文件
  5. 检查代码
  6. 中字体的真实姓名

    当我执行本文所述的所有操作时,我的字体仅适用于界面构建器。我也遇到了第5步的问题 - 我的字体没有显示在控制台输出中。

    好的,现在是时候向我提示:

    提示#1

    使用otf字体格式,如果你有不同,转换它(或询问你的设计师;)) 您可以使用此网站:https://onlinefontconverter.com/

    提示#2

    在上面的文章中,您可以找到:

      

    打开它并添加一个名为“由应用程序提供的字体”的新行   将是一个数组,您需要添加字体的所有文件名   你想用。

    而不是“应用程序提供的字体”输入“UIAppFonts” 请记住,如果您有多个plist文件,请为所有文件设置。

答案 2 :(得分:0)

Matt在隔离问题方面做得很好......我没有正确加载字体。

就我而言,问题出在Info.plist中。

我使用其名称列出了Info.plist中的字体。这是不正确的。您应该使用文件名列出Info.plist中的字体。

答案 3 :(得分:0)

我知道这已经过时了,但我遇到了同样的问题。只有在界面构建器中选择了该字体时,才会显示该字体。当我搜索UIAppFonts时,它没有列出主要的Info.plist(我们已经使用自定义字体)由于某种原因。所以我最终将字体添加到本地化(?)plist文件,导致此问题。我要做的是转到项目设置>目标>信息选项卡并在那里添加字体文件名。

答案 4 :(得分:0)

问题是你没有在代码中给出字体的ProperName,为了获取字体名称,请运行此代码。

 for family: String in UIFont.familyNames
    {
        print("\(family)")
        for names: String in UIFont.fontNames(forFamilyName: family)
        {
            print("== \(names)")
        }
    }

它将打印所有字体,搜索字体并给出正确的名称。

 let attributedText = NSMutableAttributedString(string: "We 
 Apologize! \n This feature is only available for \n Go 4.0 
 Subscriptions", attributes: [NSAttributedStringKey.font : 
 UIFont(name: "SpecialElite-Regular", size: 22)!])

答案 5 :(得分:0)

正如其他人所提到的,以下文章对于诊断问题非常有用。 http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/

在向Xcode项目中添加自定义字体时,还应添加单个字体,而不是所有字体的存储目录。如果添加该目录,则字体将在Interface Builder中可见,而在运行的应用程序中不可见。