7

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

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

它在大多数情况下都有效,但对于某些字符,例如数学斜体 d(Unicode:0x1D451)或数学斜体 q(Unicode:0x1D45E),宽度有点短。

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

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

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

更新:

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

更新:

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

4

2 回答 2

3

根据我所做的错误报告,显然这是一个 CoreText 问题,在极少数情况下出现。我一找到解决办法就会通知你。

更新:2012 年 3 月 15 日

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

于 2010-05-31T23:52:38.953 回答
1

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

于 2010-05-08T03:37:43.327 回答