“这个错误”是一个奇怪的iOS 7归因于文本错误

时间:2014-01-26 21:27:17

标签: ios iphone objective-c ios7


我在iOS 7中遇到了一个奇怪的错误,我把它称为“错误”。

摘要:
两个字符“fi”被视为一个字符。

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

使用iOS 6模拟器完全没问题,当我们切换到iOS 7模拟器时,只要单词上没有“fi”,一切都很好。例如,当我写“财务”时,从第一次点击开始,f和i都用蓝色着色。

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

代码:

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

着色功能:

- (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;
}

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

3 个答案:

答案 0 :(得分:9)

您可以在NSMutableAttributedString上将“连字”属性设置为零。  来自 documentation

  

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

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

答案 1 :(得分:3)

iOS 7增加了很多印刷细节。其中一个是连字:操作系统用一个字体上更好的一个字形(字符)变体替换一些字符序列。

答案 2 :(得分:0)

以下是解决此问题的方法。 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];