Core Text でテキスト行の境界を見つけようとしています。簡単にするために、単一の文字があると仮定します。現時点では、次の方法を使用しています。
line = CTLineCreateWithAttributedString(attrString);
rect = CTLineGetImageBounds(line, context);
ほとんどの場合は機能しますが、math italic d (Unicode: 0x1D451) や math italic q (Unicode: 0x1D45E) などの一部の文字では、幅が少し短くなります。
CTLineGetTypographicBounds()
またはを使用してみCTFramesetterSuggestFrameSizeWithConstraints
ましたが、どちらも役に立ちませんでした (グラフィックの幅ではなく、グリフの前進を使用して幅を見つけていると思います)。フォント自体が斜体ではないため、傾斜角を使用してこれを修正することもできません。 .
グリフに直接アクセスして を使用しようとしCTFontCreatePathForGlyph()
ましたが、CGGlyph と UniChar はどちらも 16 ビットであり、32 ビット文字が必要であるため失敗しました。
私が何か間違ったことをしているかどうかは誰にもわかりますか?もしそうなら、正しい方法は何ですか?
アップデート:
フォントの問題ではないことを確認するために、別のフォントを使用しました。この問題は、Arial Italic の ASCII 文字にも存在します。
アップデート:
以前の更新は無視してください。これ (Arial Italic の問題) は私自身のバグであることがわかりました。ただし、最初の問題はまだ残っています。