自定义字体在swift中无法以编程方式工作

时间:2014-11-19 00:24:26

标签: ios swift fonts

我已按照步骤在swift day-by-day和{x}添加xcode中的自定义字体 custom fonts但我无法以编程方式在app标签中设置该字体。

var labeladd = UILabel(frame: CGRectMake(40, 50, 70, 22))
    //  label.center = CGPointMake(160, 284)
 ///  labeladd.font=UIFont.boldSystemFontOfSize(15)
   labeladd.font = UIFont(name:"Source Sans Pro",size:15)
    labeladd.textColor=UIColor.blackColor()
    labeladd.textAlignment = NSTextAlignment.Center
    labeladd.text = "this is custom fonts"
    myview.addSubview(labeladd)

8 个答案:

答案 0 :(得分:92)

假设您要添加此字体:SourceSansPro-Regular.otf

三个步骤:

  1. 将字体文件SourceSansPro-Regular.otf添加到项目中,确保在"添加到目标"中选择目标。
  2. enter image description here

    转到目标构建阶段,并确保它位于复制捆绑资源下。如果没有,请添加它。

    enter image description here



    2.转到目标信息。添加新条目应用程序提供的字体,然后添加一个值为SourceSansPro-Regular.otf的新项目。

    enter image description here



    3.打开OS X 字体簿应用程序,导航到您的字体,然后按 Command + i 。请注意 PostScript名称,并在Swift代码中使用该名称。在这种情况下,它是SourceSansPro-Regularenter image description here



    所以在你的代码中:

    labeladd.font = UIFont(name:"SourceSansPro-Regular", size:15)

答案 1 :(得分:2)

有时字体名称不是文件名称。我试图使用名称为“ NexaBook”的NexaBook.otf字体,最后问题是该字体的正确名称为“ Nexa-Book”。 要检查您使用的名称是否正确,请在viewDidLoad中编写以下代码,然后检查字体的名称:

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

就我而言:

...
Nexa
== Nexa-Book
Avenir Next
== AvenirNext-Medium
== AvenirNext-DemiBoldItalic
== AvenirNext-DemiBold
...

我从Common Mistakes With Adding Custom Fonts to Your iOS App那里得到了这个想法,您可以在其中找到有关使用自定义字体的问题的详尽说明。

答案 2 :(得分:2)

如果要在情节提要中获取字体,而不能在字体家族中获取字体,并且无法通过编程方式进行设置,则原因是Xcode可能未编译字体。要解决它:

  1. 设置所需的字体(例如Roboto Bold)作为情节提要板上任何UI元素的字体,例如UILabel。
  2. 运行项目
  3. 现在检查字体系列名称。所需的字体(例如:Roboto Bold)名称将出现在其中。
  4. 现在您可以通过编程方式设置所需的字体(例如:Roboto Bold)

答案 3 :(得分:2)

我发现(XCode 12),除非您的字体恰巧已经在Main.storyboard中被使用,否则即使您已完成将字体文件注册到您的所有正确步骤,应用程序,复制到捆绑资源中,使用了PostScript名称yadda,yadda,但该脚本仍未显示,并且尝试在UIFont(name:size :)中使用它仍将返回nil。 :-(

我通过在启动时在AppDelegate应用程序中手动注册我的自定义字体(_ application:didFinishLaunchingWithOptions :)来解决此当前错误(?)

solution1

(改编自Xcode: Using custom fonts inside Dynamic framework

答案 4 :(得分:0)

enter image description here (1)首先选择“字体”文件夹,然后确保已选中它。

答案 5 :(得分:0)

如果要在框架中添加自定义字体,则需要先在应用程序委托中手动加载该字体。

Xcode: Using custom fonts inside Dynamic framework

答案 6 :(得分:0)

我在这个问题上苦苦挣扎了很长时间。原来,我忘了在Info.plist中的字体名称上添加.ttf / .otf扩展名。

答案 7 :(得分:0)

按照Apple指南进行操作:

Adding a Custom Font to Your App

除此之外,我发现如果您的字体在情节提要中还不存在,UIFont.familyNames.sorted()不会列出它。

解决方法是制作一个情节提要,您可以保留未使用的状态,并为每个希望以编程方式提供的自定义字体添加一个UILabel,然后从属性面板中将其设置为自定义字体。

这不是干净的解决方案,但我没有找到其他解决方案。

最诚挚的问候。

/ GM