在 Swift 中仅更改 AttributedText 的字体

2024-04-05

我在 IB 中创建了许多 UILabel,它们都有属性文本。每个标签的文本包含多行不同字体大小和颜色。

在运行时,我希望能够仅更改这些标签的字体名称,而不更改现有的字体大小或颜色。

我进行了研究,但找不到直接的方法来实现这一目标。有任何想法吗?


您首先需要了解苹果用来描述字体的术语:

  • Helvetica is a family
  • Helvetica Bold, Helvetica Italic, Helvetica Bold Italic, Helvetica Display等是faces
  • Helvetica Bold, 12pt is a font

你想要的是更换字体系列属性字符串的。

Swift 4

// Enumerate through all the font ranges
newAttributedString.enumerateAttribute(.font, in: NSMakeRange(0, newAttributedString.length), options: []) { value, range, stop in
    guard let currentFont = value as? UIFont else {
        return
    }

    // An NSFontDescriptor describes the attributes of a font: family name,
    // face name, point size, etc. Here we describe the replacement font as
    // coming from the "Hoefler Text" family
    let fontDescriptor = currentFont.fontDescriptor.addingAttributes([.family: "Hoefler Text"])

    // Ask the OS for an actual font that most closely matches the description above
    if let newFontDescriptor = fontDescriptor.matchingFontDescriptors(withMandatoryKeys: [.family]).first {
        let newFont = UIFont(descriptor: newFontDescriptor, size: currentFont.pointSize)
        newAttributedString.addAttributes([.font: newFont], range: range)
    }
}

label.attributedText = newAttributedString

Swift 3

let newAttributedString = NSMutableAttributedString(attributedString: label.attributedText)

// Enumerate through all the font ranges
newAttributedString.enumerateAttribute(NSFontAttributeName, in: NSMakeRange(0, newAttributedString.length), options: []) { value, range, stop in
    guard let currentFont = value as? UIFont else {
        return
    }

    // An NSFontDescriptor describes the attributes of a font: family name,
    // face name, point size, etc. Here we describe the replacement font as
    // coming from the "Hoefler Text" family
    let fontDescriptor = currentFont.fontDescriptor.addingAttributes([UIFontDescriptorFamilyAttribute: "Hoefler Text"])

    // Ask the OS for an actual font that most closely matches the description above
    if let newFontDescriptor = fontDescriptor.matchingFontDescriptors(withMandatoryKeys: [UIFontDescriptorFamilyAttribute]).first {
        let newFont = UIFont(descriptor: newFontDescriptor, size: currentFont.pointSize)
        newAttributedString.addAttributes([NSFontAttributeName: newFont], range: range)
    }
}

label.attributedText = newAttributedString

原文(旧金山):

替换(赫夫勒文本):

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Swift 中仅更改 AttributedText 的字体 的相关文章

随机推荐

  • 使用 C# 写入 CSV 文件

    我正在寻找一种在 CSV 文件的不同单元格中写入字符串的方法 我正在使用这个程序 private void button1 Click object sender EventArgs e string filePath E test csv
  • 通过 PowerShell 将所有已安装的软件分组到一个单元中

    我让 PowerShell 脚本在我们网络上的所有 PC 上运行 并从 PC 获取信息并将其保存在 CSV 文件中 并每次使用新 PC 作为新行更新文件 logData pscustomobject ComputerName Compute
  • 通过VB6发送电子邮件

    我想知道是否有办法通过VB6发送电子邮件 SMTP 我有一个应用程序 只需要在用户完成后发送一封简单的电子邮件 让一组人知道该应用程序已处理 有没有办法做到这一点 是的 取决于您使用的 Windows 版本 假设更高版本之一 CDO Mes
  • onEdit 可以以编程方式创建触发器吗?

    我编写了一个简单的脚本 尝试以编程方式从 onEdit 函数创建脚本 function onEdit test function test triggerLater function customMsgBox Browser msgBox
  • Simulink/HDL Coder 中的反馈循环

    我有一个 Simulink HDL 编码器系统 请参见下图 我有 3 个输出和 3 个输入 我希望我的系统运行 10 次 每次迭代后 它应该选择输出并将它们用作输入 我怎样才能做到这一点 使用存储器和每个信号的初始值块构建一个循环 内存块允
  • 一家大型、分散的公司应该如何与 iOS 开发者计划合作?

    I think这是SO的工作 而不是程序员 https softwareengineering stackexchange com 如果我错了请告诉我 我在一家公司工作 该公司在全国 美国 各地设有多个办事处 我所在的部门希望获得 Appl
  • 如何检查函数的类型参数是否静态解析?

    非常简单的例子 let myfun x x在智能感知中 它显示 x a gt a 在 FSI 中 它显示 x a gt a let inline myfun x x在智能感知中 它显示 x a gt a 在 FSI 中 它显示 x a gt
  • msbuild SLN 并且仍然获得单独的项目输出?

    我有一个普通的 SLN 文件 我可以从命令行使用 msbuild 很好地编译它 我这样做 C slndir gt msbuild p OutDir C slnbin 它将所有内容转储到 C slnbin 但网站除外 网站部署到 C slnb
  • 按属性对 XML 文件进行排序

    我有以下 XML 代码
  • 如何通过JSON的replacer函数对对象进行字符串化?

    这是我的代码 BAD a 2 b 1 c Nexus d Alligator e 5 f 1431807036 g 2 w 17 b 5 console log JSON stringify BAD a
  • 组图模式在 SPARQL 中如何工作

    首先 我不知道这是否真的称为组图模式 反正 请看看这个查询 select x y where x rdf type rs Recommendable union xd rs doesntexist y 有no rs doesntexist但
  • Paramiko:从公钥字符串创建 PKey

    我试图在低级别使用 SSH 协议 即我不想启动 shell 或任何东西 我只想传递数据 因此 我正在使用Paramiko的Transport http www lag net paramiko docs paramiko Transport
  • 乐谱库

    我是一名 Python 黑客 希望构建一个乐谱应用程序 我很擅长阅读 理解乐谱 弹钢琴多年 这是我完整的新手问题 是否有以数字方式表示笔记的标准 我不想重新发明任何轮子 给定一系列音符和持续时间 是否有一个库可以以乐谱格式显示这些内容 基本
  • 为什么我收到 422 错误代码?

    我正在发出 POST 请求 但除了 422 响应之外无法获得任何内容 Vue js 客户端代码 new Vue el app data form companyName street city state zip contactName p
  • iOS:Facebook 聊天头行为和动画

    这个问题可能有点过时了 但我一直在使用新的 iOS 版 Facebook 的 聊天头 功能 聊天头仅出现在应用程序中 并且想知道 Facebook 是如何实现这一点的 例如 他们如何处理聊天头的拖动动画 以及 当单击聊天头时 他们如何设法将
  • 在redux中间件中使用react-router进行重定向

    我创建了一个中间件来检查请求是否返回无效的访问响应 如果状态是 401 我想将用户重定向到登录页面 这是中间件代码 import React from react import push replace from react router
  • TPageControl 上的 TLinkLabel 背景

    我试图在 TPageControl 上使用 TLinkLabel 但找不到让它使用父级背景的方法 Image removed because the website doesn t exist any more and I can t fi
  • iOS 文本字段验证

    我需要一种方法来确保电话号码有 10 位数字 没有其他字符 即 并确保电子邮件地址是有效的电子邮件 格式正确 有没有任何库不能让我轻松做到这一点 这样我就不必编写正则表达式了 这将检查 UITextField 是否包含 10 位或更少的正确
  • 如何设置使用 ChartFactory.createBarChart 创建的 BarGraph 的 Y 轴范围

    我使用创建了一个条形图jfree chart ChartFactory使用下面的代码 我需要将Y轴的范围设置为0 100 如何设置最大值 import java io File import org jfree chart ChartFac
  • 在 Swift 中仅更改 AttributedText 的字体

    我在 IB 中创建了许多 UILabel 它们都有属性文本 每个标签的文本包含多行不同字体大小和颜色 在运行时 我希望能够仅更改这些标签的字体名称 而不更改现有的字体大小或颜色 我进行了研究 但找不到直接的方法来实现这一目标 有任何想法吗