在核心文本中查找文本的边界矩形

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

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

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

我尝试过使用CTLineGetTypographicBounds()CTFramesetterSuggestFrameSizeWithConstraints ,但它们都没有帮助(我认为它们使用glyph的advance来查找宽度,而不是它的图形宽度。)由于字体本身不是斜体,我也不能使用斜面纠正此问题的角度。

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

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

更新:

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

更新:

忽略我以前的更新! 事实证明这一个(与Arial斜体的问题)是我自己的错误。 第一个问题仍然存在。


根据我提出的错误报告,显然这是一个CoreText问题,出现在极少数情况下。 只要我找到修复,就会让你知道。

更新:12年3月15日

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


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

链接地址: http://www.djcxy.com/p/45791.html

上一篇: Finding text's bounding rect in Core Text

下一篇: How do I know if a BigDecimal failed to parse?