【问题标题】:Custom fonts not working in Swift programmatically but working with xib/Storyboard自定义字体不能以编程方式在 Swift 中工作,但可以与 xib/Storyboard 一起使用
【发布时间】:2019-04-15 04:32:40
【问题描述】:

我在我的应用程序中使用自定义字体。我将字体“ttf”文件添加到资源文件夹并使其可用于所有目标。我验证了,它位于复制包资源和具有正确命名约定的 plist 文件中。

我使用 FontBook Mac 应用程序获取自定义字体的 PostScript 名称并将其复制粘贴到我的代码中以避免类型错误。

我可以在 Storyboard/xib 中选择字体并在 UI 中反映。但是,当我尝试以编程方式进行时,就像不使用下面这样的设计器时,字体不会反映在 UI 中。

这里值得注意的一点是我有 4 个按钮,如果我通过情节提要为一个按钮设置字体并通过编程为其他按钮设置相同的字体,那么它就可以工作了。

  exploreAppBtn.titleLabel?.font =  UIFont(name: "SansOfcMed-Bold", size: 20)

这是 Xcode 问题吗?有人遇到过吗?如果是,解决方法是什么?

添加了 Plist 文件和构建阶段截图

感谢任何帮助!谢谢

【问题讨论】:

  • 您尝试传递什么而不是 CustomFontName?
  • CustomFontName 只是常量文件中的一个字符串常量。

标签: ios swift xcode swift4 ios12


【解决方案1】:

能否请您澄清一下您是如何创建 CustomFontName 的

可能字体名称无效

您可以在代码中找到有效的字体名称。

let familyFontsNames = UIFont.familyNames

for familyName in familyFontsNames {
    let fontsName = UIFont.fontNames(forFamilyName: familyName)
    for fontName in fontsName {
        print(fontName) // Prints list of all available fonts name. And you should use the name.
    }
}

尝试检查您的 CustomFontName 是否存在于列表中。

【讨论】:

  • CustomFontName 只是常量文件中的字符串常量。我也尝试直接给出字体 PostScript 名称,但没有用。该字体列在系列字体名称列表中。
【解决方案2】:
  1. 检查是否在 info.plist 文件中添加了具有正确命名约定的自定义字体。
  2. 添加扩展

    extension UIFont {
        class func fontName(size: CGFloat) -> UIFont {
            return UIFont.init(name: "CustomFontName", size: size)!
         }
    }
    

用法:

exploreAppButton.titleLabel?.font =  UIFont.fontName(size: 16)

【讨论】:

  • 是的,字体列在 plist 文件中,我可以通过设计师来完成。仅在通过代码访问时出现问题。
猜你喜欢
  • 1970-01-01
  • 2019-06-25
  • 2020-02-19
  • 1970-01-01
  • 2017-03-14
  • 2015-01-16
  • 2018-12-02
  • 2014-10-14
  • 1970-01-01
相关资源
最近更新 更多