【问题标题】:Swift NSAttributedString custom fontsSwift NSAttributedString 自定义字体
【发布时间】:2015-03-25 18:09:42
【问题描述】:

我已经阅读了不同的解决方案,但似乎没有任何效果。此代码创建一个 nil 异常:

[NSFontAttributeName: UIFont(name: "Raleway-SemiBold", size: 16)!]

我已正确安装字体,并且它们在应用程序中正确显示(目标已设置)。
我试图在plist 中添加应用程序提供的字体,但什么也没发生。我无法编辑数组中的项目:(they are item0 : string : Raleway-SemiBold.tff)

所以基本上我被困住了......有时 Swift 和 Apple 环境对程序员来说非常棒,但有时(大部分时间)它们非常有问题,需要很多变通方法才能达到预期的结果。

非常感谢您的帮助。

【问题讨论】:

  • 您确认UIFont(name: "Raleway-SemiBold", size: 16) 不是nil? – 没有冒犯的意思,但我怀疑 Apple 或 Swift 是罪魁祸首 :)
  • 无意冒犯,我不责怪 Apple 或 Swift,我需要为这个项目做很多变通方法,而这正是我不得不全力以赴的时刻 :)。好吧,我猜它们是 nil,因为编译器说在展开时意外发现 nil。但字体包含在应用程序中,它们在界面等中工作。
  • 一个常见的陷阱是在UIFont(name: ...) 中指定了错误的字体名称——它不是文件名。但是肯定有几十个Q&A有确切的说明......
  • 好吧,我只是循环浏览了 fontNames,但我的字体没有在那里列出...编辑:实际上只有 9 个中的 4 个被列出
  • "我确实尝试在 plist 中添加应用程序提供的字体...""我无法命名数组中的项目是什么意思" ?

标签: ios swift nsattributedstring custom-font


【解决方案1】:

因为UIFont(name: "Raleway-SemiBold", size: 16) 返回nil 并且您正在使用! 强制解包,所以您遇到了异常。

改为使用条件展开:

if let font = UIFont(name: "Raleway-SemiBold", size: 16) {
    let attributes = [NSFontAttributeName: font]
    // do something with attributes
} else {
    // The font "Raleway-SemiBold" is not found
}

您可以使用UIFontfamilyNames()fontNamesForFamilyName(_:) 方法来获取所需的确切字符串。

斯威夫特 4

if let font = UIFont(name: "Raleway-SemiBold", size: 16) {
    let attributes = [NSAttributedStringKey.font: font]
    // do something with attributes
} else {
    // The font "Raleway-SemiBold" is not found
}

【讨论】:

  • 所以我应该遍历字体并查看名称是什么?字体已安装并在应用程序的其他部分运行。
  • 当然!如果您没有看到您期望的字体名称,请see this answer 进行故障排除步骤。
【解决方案2】:

您只需要编写正确的字体字符串名称即可。

  1. 不要写字体文件名。 (就像 bodoni-mt-bold.ttf 它是我从任何网站下载的文件名)。

  2. 要找出确切的字体名称,请按照下图进行操作。

  3. 转到您的标签,选择它并转到自定义字体,然后查看您的自定义字体在其系列中的名称。如果您的自定义字体名称在那里,则复制该名称并将其作为字符串传递给您想要使用它的地方。 (注意你不能复制字体名称文本,你必须写在其他地方然后过去)

【讨论】:

    【解决方案3】:

    对于 Swift 3,以下更新对我有用:

    首先您将设置字体,然后使用NSFontAttributeName 创建一个textAttribute

    let font = UIFont(name: "Raleway-SemiBold", size: 16)
    textAttribute = [NSFontAttributeName: font as Any, NSForegroundColorAttributeName: UIColor.black]
    

    然后您可以将textAttribute 应用于您的标签、文本字段等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多