在核心文本中查找文本的边界矩形
我试图在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中提交一个错误报告。