【问题标题】:NSLayoutManager boundingRect(forGlyphRange:in:) returns wrong value for RTL languagesNSLayoutManager boundingRect(forGlyphRange:in:) 返回 RTL 语言的错误值
【发布时间】:2019-01-12 15:39:11
【问题描述】:

在我的应用程序中,我在 UITextView 的文本行下绘制自定义背景。为此,我使用NSLayoutManagerboundingRect(forGlyphRange:in:) 方法。它适用于 LTR 语言(拉丁文、西里尔文、中文等): 但是,如果我将它用于 RTL 文本(希伯来语、波斯语等),该方法会返回错误的边界矩形(请参阅左边缘的填充):

这些额外的填充似乎有一些逻辑。第一个字符确定行的填充大小:

这种额外填充的原因是什么以及如何获得正确的边界矩形?

这是一个演示:https://www.dropbox.com/s/bpsr7bhhd7gqm2z/hebrew.zip?dl=0

UPD:似乎这个函数对所有使用的字母都给出了错误的结果,我不知道它是如何被调用的,变异字符。以梵文为例:

【问题讨论】:

  • 我尝试运行我们的解决方案项目,并且可以让它与您的解决方案屏幕截图相匹配。您确定您的解决方案项目是正确的吗? Screenshot

标签: ios iphone swift localization hebrew


【解决方案1】:

似乎boundingRect(forGlyphRange:in:) 精确计算字形及其空格以附加相邻字符,而不是最终组成的文本片段,它会提供额外的填充。

我解决了我的问题,但使用了NSStringboundingRect 函数。查看结果:https://www.dropbox.com/s/qq5lmo8fsozjqml/hebrew%202.zip?dl=0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多