在Core Text中查找文本的边界rect

moh*_*enr 7 macos cocoa cocoa-touch core-text

我正在尝试在Core Text中找到一行文本的边界.为简单起见,假设它有一个字符.目前我正在使用以下方法:

line = CTLineCreateWithAttributedString(attrString);
rect = CTLineGetImageBounds(line, context);
Run Code Online (Sandbox Code Playgroud)

它大部分时间都有效,但对于某些字符,如数学斜体d(Unicode:0x1D451)或数学斜体q(Unicode:0x1D45E),宽度有点短.

我尝试使用CTLineGetTypographicBounds()CTFramesetterSuggestFrameSizeWithConstraints,但他们也没有帮助(我认为他们使用字形的前进来找到宽度,而不是它的图形宽度.)由于字体本身不是斜体,我也不能使用倾斜角来纠正这个.

我尝试直接访问字形并使用CTFontCreatePathForGlyph(),但由于CGGlyph和UniChar都是16位而且我需要32位字符而失败.

有谁知道我做错了什么?如果是这样,那么正确的方法是什么?

更新:

为了确保它不是与字体相关的问题,我使用了不同的字体.即使是Arial Italic中的ASCII字符也存在问题.

更新:

忽略我以前的更新!原来这个(Arial Italic的问题)是我自己的错误.第一个问题仍然存在.

moh*_*enr 3

根据我所做的错误报告,显然这是一个 CoreText 问题,只在极少数情况下出现。一旦找到修复方法,我会立即通知您。

更新:2012 年 3 月 15 日

我忘了早点更新这个问题,但这已经解决了。该修复已在 OS X Lion / iOS 5 中进行。