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

时间:2010-05-05 02:25:12

标签: cocoa cocoa-touch macos core-text

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

line = CTLineCreateWithAttributedString(attrString);
rect = CTLineGetImageBounds(line, context);

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

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

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

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

更新

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

更新

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

2 个答案:

答案 0 :(得分:3)

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

更新:12月3日'

我忘了尽早更新,但这是固定的。该修复程序位于OS X Lion / iOS 5中。

答案 1 :(得分:1)

据我所知,CTLineGetImageBounds是正确使用的功能。我建议在RadarWeb中提交错误报告。