ios NSMutableAttributedString NSKernAttributeName与" fl"错误的字距调整和" fi"信

时间:2015-08-19 16:43:57

标签: ios fonts nsattributedstring nsmutableattributedstring kerning

我在标签上使用attributed strings来更改字母之间的间距:

var attributedString=NSMutableAttributedString(string: "Fifi floflo")
attributedString.addAttribute(NSKernAttributeName, value: CGFloat(10), range: NSRange(location: 0, length: attributedString.length))
label.attributedText=attributedString

字距很好,除了两组字母,其中包括" fl "和" fi " (也许是我目前没有看到的其他人)。 我正在使用" Avenir-medium"字体,但我用基本的Arial字体测试,问题仍然存在。

With the word 'Profile'

With the word "Fifi floflo'

1 个答案:

答案 0 :(得分:2)

NSAttributedStrings默认启用连字。 Ligatures将悬垂字符组合组合成单个字形。如果您正在应用字母间距,则需要禁用它们 - 否则这些字母对字形不会分开。

attributedString.addAttribute(NSLigatureAttributeName, 
  value:0, 
  range: NSRange(location: 0, length: attributedString.length))

来自文档:

  

NSLigatureAttributeName

     

此属性的值是包含整数的NSNumber对象。 Ligatures导致使用与这些字符对应的单个自定义字形呈现特定字符组合。值0表示没有连字。值1表示使用默认连字。值2表示使用所有连字。此属性的默认值为1.(iOS上不支持值2。)