启用“颜色混合图层”时,是否可以将非英文字符的UILabel设为绿色?

时间:2016-02-10 06:42:29

标签: ios uitableview uikit uilabel core-graphics

我有一个带有自定义单元格的表格视图,我尝试通过在模拟器中选中Color Blended Layer时使单元格内的所有子视图都为绿色来优化它。

当单元格中UILabel的背景设置为白色时:

let title = UILabel()
contentView.addSubview(title)
title.background = UIColor.whiteColor()
title.text = "Hi, how are you?"

这个UILabel子视图在模拟器中会变成绿色,这很好。但是,如果我将文本更改为某些中文:

title.text = "你好"

UILabel子视图将变为红色。这个SO post提供了有关情况的一些解释。实际上有解决方案吗?

4 个答案:

答案 0 :(得分:2)

仅供参考,XIB(个人偏好)或代码中的三个步骤。

  
      
  1. 设置opaque = YES
  2.   
  3. backgroundColor =纯色
  4.   
  5. clipsToBound = YES
  6.   

然后非英语UILabel将渲染 - 传递一次,为绿色。

答案 1 :(得分:1)

我不得不说这是Apple的内部实现。我们不应该/(可能)不能摆弄它。毕竟,您看到的“颜色”只是图层结构的表示。你附上的问题的答案是一个很好的解释。

我建议不要计划任何过早的优化。毕竟,即使您确实感觉到性能提升,“颜色混合层”也很难看,无法应用于真实设备。或者只是尽量不去关注它!

编辑:

以下是Apple模拟器的截图,如果Apple可以使用它,你也可以忍受它! enter image description here

答案 2 :(得分:0)

检查你的textlayer.string第一个字母是英文还是其他

 NSMutableArray*arrAlphabets;
    arrAlphabets=[NSMutableArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",nil]]

然后在Indexpath方法的内部Tableview单元格行:

NSString *str=[textlayer.string substringToIndex:1];
if(str isEqualToString:arrAlphabets)   //use for loop to run arralphabets
{
    //do your code to maintail the layer color .
}

希望这个概念可以帮助你:)

答案 3 :(得分:-1)

根据使用的字体,您可以检查等宽字符(西方)与比例字符(中文)。

等宽字符是8位,其中比例1是16位。我不知道Swift如何检查字节大小,因此我无法提供任何代码。

Apple的Swift编程指南可以提供帮助。查看标题为:字符串的Unicode表示的部分。