获取字体.iOS 14的重量



在iOS 13和更低版本中,我得到了字体。字体

var weight: UIFont.Weight {
guard let traits = fontDescriptor.object(forKey: .traits) as? [UIFontDescriptor.TraitKey: Any], let weightValue = traits[.weight] as? CGFloat else { return .regular }
let weight = UIFont.Weight(rawValue: weightValue)
return weight
}

但是自从iOS 14以来,weightValue是错误的。例如:

let font = UIFont(name: "AvenirNext-Bold", size: 21)
print(font?.weight.rawValue)
print(font?.weight == .bold)

iOS 14 - 0.40000000000000002 false

iOS 13 - 0.40000000596046448 true

有人遇到过吗?

这不是一个bug。实际上,在小数点后的位数(在本例中为16)之后,它可能是不准确的。浮点数是通过IEEE 754单精度浮点运算标准计算的。对于4到6之间的整数,最初的标准只能精确到小数点后7位,但自最初的标准以来,这已经迭代改进,例如在2019年和2020年(详见此处)。

所看到的可能是条件强制转换的效果。从FloatCGFloat的转换失去了精度。

相关内容

  • 没有找到相关文章

最新更新