繁体   English   中英

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

[英]custom font not working programmatically in swift

我已经按照步骤在 xcode 中快速添加自定义字体和自定义字体,但我无法以编程方式在应用程序标签中设置该字体。

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)

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

四个步骤:

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

在此处输入图片说明

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

在此处输入图片说明



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

在此处输入图片说明



  1. 从您的查找器中,双击文件SourceSansPro-Regular.otf ,它可能会要求您将字体安装到您的字体簿。



  1. 打开 OS X Font Book应用程序,导航到您的字体,然后按Command+i 记下PostScript 名称并在 Swift 代码中使用该名称。 在这种情况下,它是SourceSansPro-Regular 在此处输入图片说明



所以在你的代码中:

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

有时字体的名称不是您的文件的名称。 我试图使用名为“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
...

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

我发现(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)
})

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

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

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

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

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

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

Xcode:在动态框架内使用自定义字体

按照苹果指南:

向您的应用程序添加自定义字体

除此之外,我发现如果 Storyboard 项目中还没有您的字体,则 UIFont.familyNames.sorted() 不会列出它。

解决方法是制作一个故事板,您可以不使用,并为您希望以编程方式提供的每个自定义字体添加一个 UILabel,然后从属性面板将您的字体设置为自定义字体。

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

此致。

/总经理

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM