“错误”奇怪的iOS 7归因于文本错误

我在iOS 7有一个奇怪的错误,我称之为“错误”。

抽象:
两个字符“fi”被认为是一个字符。

说明:
我创build了一个带有单词的UILabel,作为一个属性文本。 我创build了一个函数,点击蓝色的单词中的一个字符。 (即首先点击它的颜色的第一个字符,第二次点击颜色从第一到第二…)。

使用iOS 6模拟器完全没问题,当我们切换到iOS 7模拟器时,只要单词不包含“fi”就可以了。 例如,当我写“财务”,从第一次点击f和我都蓝色。

它不依赖于'fi'的位置,似乎只有'fi'有问题。

码:

UILabel:
@property (strong, nonatomic) IBOutlet UILabel *wordLabel;

着色function:

 - (void) changeWordLabelWithWord:( NSString *)word to:(int) position{ NSMutableAttributedString *coloredText = [[NSMutableAttributedString alloc] initWithString:word]; [coloredText addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:0.25 green:0.66 blue:0.96 alpha:1] range:NSMakeRange(0,position)]; _wordLabel.attributedText = coloredText; } 

感谢您的帮助和见解^^。
干杯!

你可以在你的NSMutableAttributedString上设置“ligature”属性为零。 从文档 :

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

使用默认值1 ,字母“fi”被渲染为一个字形。 有些字体甚至有三个字符序列的连字,例如“ffl”。

iOS 7增加了许多印刷细节。 其中之一是连字:操作系统通过印刷更好的一个字形(字符)变体来replace一些字符序列。

这是你如何解决这个问题。 iOS 6.0+

 NSMutableAttributedString *attributedString; attributedString = [[NSMutableAttributedString alloc] initWithString:label.text]; [attributedString addAttribute:NSLigatureAttributeName value:@0 range:NSMakeRange(0, label.text.length)]; [label.text setAttributedText:attributedString]; [attributedString release];