You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算NSAttributedString.Key.expansion属性的取值?

计算NSAttributedString.Key.expansion的取值方法

核心原理

NSAttributedString.Key.expansion官方描述里的「扩展因子的对数」,指的是自然对数(ln)。最终作用在字形上的水平缩放倍数是e的该属性值次方(即exp(expansionValue))。

针对你的需求的计算步骤

你需要把宽度从295扩展到300,按以下步骤计算:

  1. 先算出目标缩放因子:目标宽度 ÷ 原宽度
  2. 对这个缩放因子取自然对数,得到的结果就是expansion的取值

代码示例(Swift)

let originalWidth: CGFloat = 295
let targetWidth: CGFloat = 300

// 计算缩放因子
let scaleFactor = targetWidth / originalWidth
// 计算expansion值(log为自然对数,对应数学中的ln)
let expansionValue = log(scaleFactor)

// 应用到NSAttributedString
let attributedString = NSMutableAttributedString(string: "你的文本内容")
attributedString.addAttribute(.expansion, value: expansionValue, range: NSRange(location: 0, length: attributedString.length))

验证与注意事项

  • 验证逻辑:应用该属性后,文本实际宽度应为原宽度 × exp(expansionValue),也就是295 × (300/295) = 300,符合需求
  • 如果需要缩小文本宽度,缩放因子小于1,expansionValue会是负数,公式同样适用
  • 实际场景中可能需要微调,因为文本宽度计算可能受字体、字间距等其他属性影响,建议结合boundingRect(with:options:context:)方法验证最终显示宽度

内容的提问来源于stack exchange,提问作者Graham Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:42:04