2012-03-13 69 views
3

我一直在开发iOS应用程序,最近“升级”到xCode 4.3.1和iOS 5.1模拟器,并且只有一个字符有一个很奇怪的问题。它在字符查看器中被称为“重复检查标记”,它在5.0.1和更低版本的应用程序中看起来很棒,并使用.textColor = [UIColor redColor]着色。在5.1中,它在模拟器中显示为黑色,并且由于我的手机已越狱,所以在实际设备上我没有在5.1中对其进行检查。如果我放入任何其他角色,它会显示为红色,但是这个特定角色总是显示为黑色。如果我在它之前放置一个空格,它会显示为红色,但是因为我正在使用图层进行边框,所以间距已关闭。下面是实际的代码,但我尝试了一个更简单的标签并且有相同的问题。IOS 5.1 UILabel与重复选中标记字符忽略TextColor

 isChecked = [[[UILabel alloc] initWithFrame:CGRectMake(20.0,9.0,20,20)] autorelease]; 
     isChecked.font = [UIFont boldSystemFontOfSize:24.0]; 
     isChecked.backgroundColor = [UIColor clearColor]; 
     isChecked.textColor = [UIColor redColor]; 
     isChecked.layer.borderColor = [UIColor blackColor].CGColor; 
     isChecked.layer.borderWidth = 2.0; 
     isChecked.text = @"✔"; 
     isChecked.tag = 2; 
     [cell.contentView addSubview:isChecked]; 

任何人遇到这种或其它特殊字符和UILabel.textColor问题?任何建议的解决方法?我试过暂时删除图层,甚至创建一个新的最小标签,如果只有这个字符,则结果为黑色,如果有其他字符,则设置为红色。

+0

如果您使用unicode转义(@“\ u_whatever_”)而不是在源代码中使用unicode字符,会发生什么?我记得在某个地方看到,把unicode字符放在源代码中是个不好的主意,但我没有明确的来源。 – jrturton 2012-03-13 17:33:02

+0

更新和修复适用于我,但仍然很奇怪。如果有人遇到这个晦涩的问题,我发现使用命名字体而不是系统字体似乎可以解决它。 – skymatt70 2012-03-13 17:38:44

+0

@ jrturton,伟大的建议,并表现相同。如果只是那个字符和系统字体,总是黑色的,但是我会离开@“\ u2714”,因为我认为读取代码更加精确。 – skymatt70 2012-03-13 17:43:04

回答

1

更新和修复适用于我,但仍然很奇怪。如果有人遇到这个晦涩的问题,我发现使用命名字体而不是系统字体似乎可以解决它。

+1

我不了解你,但我只能使它工作,如果指定的字体是Zapf Dingbats;没有其他字体(我发现)似乎具有该字符,所以它会回落到Emoji图形中,他们明显在5.1中添加了它。 – zem 2012-04-06 19:14:35

+1

zem,我使用“Arial Unicode MS”和\ u2714字符,并且能够将它着色为红色。 – skymatt70 2012-04-06 23:21:59

+0

奇怪。我在字符查看器中看到Arial Unicode MS是带有该字形的另一种字体,但它在iOS项目的界面生成器中不适用于我。也许它可以在代码中指定,但不是在那里? – zem 2012-04-07 00:09:19

0

在iOS9中,他们删除了为非标准字体着色繁重选中标记的可能性。这是因为U+2714 HEAVY CHECK MARK包含在苹果的emoji字符集中,它将被绘制为全色位图而不是单色Unicode字符。

为防止这种情况发生,您可以使用U+FE0E VARIATION SELECTOR-15字符。如果将字符串更改为@"\u2714\uFE0E",则可以为其着色。

isChecked.text = @"\u2714\uFE0E"; 
isChecked.textColor = [UIColor redColor];