垂直条形字符在NSString中奇怪地出现

时间:2016-03-17 12:10:56

标签: ios objective-c ipad nsstring

字符串文字中的垂直条|字符在Xcode和iPad模拟器上以不同方式显示。

基本上我只是通过竖线|字符将一组值分隔为NSString字面值。

Objective-C代码:

NSString cars = @"Ferrari | Maserati | Subaru | Porsche | Mazda | Renault | Aston | Cadillac"

这没什么特别的,但无论出于什么原因,它在Xcode以及iPad模拟器中以奇怪的形式出现。

问题的截屏:

Font style change for bitwise OR symbol

绿色箭头显示|字符,看起来不错,但红色箭头指向的相同字符看起来有点粗,也有模糊。

供参考:

  • 我在UILabel内呈现此字符串文字。
  • UILabel的字体为System- System,样式为Regular,尺寸为14

我在这个问题上已经坚持很长一段时间了,并且无法弄清楚是什么导致了这个问题。

2 个答案:

答案 0 :(得分:2)

这纯粹是CoreText的抗锯齿渲染的结果。 你无法控制,因为Mac OS和iOS的文本渲染引擎忽略了TTF和OTF文件中的提示指令,这些指令旨在使字符“粘住”整数像素。

这仅仅是在原始iPad等低分辨率显示器上展示的非问题;具有Retina显示屏的设备具有更清晰的渲染,如果存在问题则不会引起注意。

答案 1 :(得分:1)

正如其他人所说,你可能会遇到一个小数像素,这会引起抗锯齿。我在Safari中看到了类似的问题,即使只是阅读问题中的文字。还有其他人注意到,你似乎在这个字符串中有其他字符被抗锯齿。例如,请查看保时捷中的P和REnault中的E。 (也许这些是压缩工件,但可能是原始的。)

尝试改善这种情况的一种常见方法是使用奇数字体大小(13或15而不是14)。这并不总是成功,但可以提供帮助。绝对解决此问题的唯一方法是执行您自己的文本布局,以确保|字符对齐而不是使用标签。您可以通过让Core Text执行布局,然后调整关键字形的位置来实现此目的。或者您可以手动绘制垂直线而不是使用文本。 (@Sulthan提出了一个有趣的小集合视图建议,可能更灵活。)