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

bLa*_*oLE 24 fonts ios swift

我已经按照步骤在xcode中添加自定义字体,每天都是swift自定义字体,但是我无法以编程方式在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)
Run Code Online (Sandbox Code Playgroud)

Van*_*ran 109

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

三个步骤:

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

在此输入图像描述

转到目标的Build Phases并确保它位于Copy Bundle Resources下.如果没有,请添加它.

在此输入图像描述



2.转到目标的信息.添加新条目由应用程序提供的字体,然后添加具有此值的新项目SourceSansPro-Regular.otf.

在此输入图像描述



3.打开OS X Font Book应用程序,导航到您的字体,然后按Command + i.请注意PostScript名称并在Swift代码中使用该名称.在这种情况下,它是SourceSansPro-Regular. 在此输入图像描述



所以在你的代码中:

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

  • 这确实有帮助.我错过了在.plist文件中的字体名称末尾添加扩展名. (5认同)
  • 哇,字体书部分为我修好了.没有意识到PostScript名称会有所不同.干杯 (3认同)
  • 我也没有意识到我需要使用PostScript名称。使用后,它马上就消失了。谢谢! (2认同)

tir*_*tea 11

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

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

let fonts = Bundle.main.urls(forResourcesWithExtension: "ttf", subdirectory: nil)
fonts?.forEach({ url in
    CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
})
Run Code Online (Sandbox Code Playgroud)

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


小智 7

在此处输入图片说明 (1)首先选择“字体”文件夹,然后确保它被选中。


aba*_*net 7

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

for family: String in UIFont.familyNames
    {
        print(family)
        for names: String in UIFont.fontNames(forFamilyName: family)
        {
            print("== \(names)")
        }
    }
Run Code Online (Sandbox Code Playgroud)

就我而言:

...
Nexa
== Nexa-Book
Avenir Next
== AvenirNext-Medium
== AvenirNext-DemiBoldItalic
== AvenirNext-DemiBold
...
Run Code Online (Sandbox Code Playgroud)

我从向iOS应用程序添加自定义字体的常见错误中得到了这个想法,在这里您可以找到有关使用自定义字体的问题的详尽描述。


Shi*_*jaj 6

如果您在故事板中获取字体但不在字体系列中并且无法以编程方式设置它,则原因是 Xcode 可能未编译该字体。要解决它:

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