Swift NSAttributedString 自定义字体

Swift NSAttributedString custom fonts

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

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

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

所以基本上我被卡住了...有时 Swift 和 Apple 环境对程序员来说很棒,其他时候(大部分时间),它们有很多错误并且需要很多解决方法才能达到预期结果。

非常感谢您的帮助。

你得到一个异常,因为 UIFont(name: "Raleway-SemiBold", size: 16) returns 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(_:) 方法来获取所需的确切字符串。

Swift 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
}

您只需输入正确的字体字符串名称即可。

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

  2. 按照下图找出准确的字体名称。

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

对于 Swift 3,这是对我有用的更新:

首先,您将设置字体,然后使用 NSFontAttributeName:

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

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