如何计算NSAttributedString.Key.expansion属性的取值?
计算NSAttributedString.Key.expansion的取值方法
核心原理
NSAttributedString.Key.expansion官方描述里的「扩展因子的对数」,指的是自然对数(ln)。最终作用在字形上的水平缩放倍数是e的该属性值次方(即exp(expansionValue))。
针对你的需求的计算步骤
你需要把宽度从295扩展到300,按以下步骤计算:
- 先算出目标缩放因子:目标宽度 ÷ 原宽度
- 对这个缩放因子取自然对数,得到的结果就是
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
相关产品推荐
相关产品推荐

