【问题标题】:IOS 5.1 UILabel with Heavy Check Mark character ignores TextColor带有重复选标记字符的 IOS 5.1 UILabel 忽略 TextColor
【发布时间】:2012-03-13 17:27:32
【问题描述】:

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

        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 的问题吗?任何建议的解决方法?我已经尝试暂时删除该图层,甚至创建一个新的最小标签,如果只有这个字符,则结果相同为黑色,如果有其他字符,则为红色。

【问题讨论】:

  • 如果您使用 unicode 转义 (@"\u_whatever_") 而不是在源代码中使用 unicode 字符,会发生什么情况?我记得在某处读到,将 unicode 字符放入源代码是一个坏主意,但我没有明确的来源。
  • 更新和修复对我有用,但仍然很奇怪。如果其他人遇到这个晦涩的问题,我发现使用命名字体而不是系统字体似乎可以解决它。
  • @jrturton,很好的建议,它的行为是一样的。如果只是那个字符和系统字体,总是黑色的,但我会留下 @"\u2714" 因为我同意如果阅读代码会更精确。
  • 你应该把你的修复作为答案,你以后可以自己接受。很高兴你让它工作了,打开一个关于这个的错误报告可能是值得的。

标签: xcode uilabel textcolor ios5.1


【解决方案1】:

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

【讨论】:

  • 我不了解你,但只有当命名字体是 Zapf Dingbats 时,我才能使它工作;没有其他字体(我发现)似乎有那个字符,所以它会回退到他们显然在 5.1 中添加的表情符号图形。
  • zem,我正在使用“Arial Unicode MS”和 \u2714 字符,并且能够将其涂成红色。
  • 奇怪。我在字符查看器中看到 Arial Unicode MS 是另一种带有该字形的字体,但它不是我在 iOS 项目的界面构建器中的选项。也许它可以在代码中指定但不在那里?
  • zem,确实很奇怪。我没有使用 IB,但我刚刚确认它没有在此处列出,但我确实找到了一个帖子,显示它在 iOS 中可用。我还对我的代码进行了一些试验,发现除了 Arial Unicode MS 之外,我尝试的每种字体都存在问题。我很高兴我偶然发现了它。也许在你的 viewDidLoad 中你可以设置它。
  • 这里还有两个可能有效的复选标记:☑✓ 还有一个绿色的 Emoji2 复选标记,它总是绿色的:✅ cmd+option+t = Mac 上的 Unicode 字符索引...希望这有帮助!
【解决方案2】:

在 iOS9 中,他们已经取消了为非标准字体着色重型复选标记的可能性。这是因为U+2714 HEAVY CHECK MARK 包含在 Apple 的表情符号字符集中,它将被绘制为全色位图而不是单色 unicode 字符。

防止这种情况发生的方法是,您可以使用U+FE0E VARIATION SELECTOR-15 字符。如果你把字符串改成@"\u2714\uFE0E",你就可以给它上色了。

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

【讨论】:

  • 关于颜色,这是可行的 - 但是在我的情况下,复选标记的大小也大大减小了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 2019-01-14
  • 2018-04-26
相关资源
最近更新 更多