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

Vertical bar character appearing oddly within NSString

字符串文字中的竖线 | 字符在呈现时在 Xcode 和 iPad 模拟器中显示不同。

基本上我只是用竖线 | 字符分隔一组值作为 NSString 文字。


Objective-C代码:

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

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

问题截图:

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

仅供参考:

我真的为这个问题发疯了很长一段时间,不知道是什么原因造成的。

这纯粹是 CoreText 抗锯齿渲染的结果。 您无法控制它,因为 Mac OS 和 iOS 的文本渲染引擎会忽略 TTF 和 OTF 文件中的提示指令,即旨在使字符 "stick" 为整数像素。

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

正如其他人指出的那样,您可能碰到了小数像素,这会导致抗锯齿。我在 Safari 中看到了类似的问题,即使只是阅读您问题中的文字。另外正如其他人所指出的,您似乎对该字符串中的其他字符进行了抗锯齿处理。例如,看看保时捷的 P 和雷诺的 E。 (也许这些是压缩伪像,但可能是原始的。)

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