Поиск текста, ограничивающего прямоугольник в основном тексте

Я пытаюсь найти границы строки текста в Core Text. Для простоты предположим, что он имеет один символ. В настоящий момент я использую следующий метод:

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

Он работает большую часть времени, но для некоторых символов, таких как математический d (Unicode: 0x1D451) или математический q (Unicode: 0x1D45E), ширина немного коротка.

Я попытался использовать CTLineGetTypographicBounds() или CTFramesetterSuggestFrameSizeWithConstraints, но они тоже не помогли (я думаю, что они используют глиф, чтобы найти ширину, а не ее графическую ширину.) Поскольку сам шрифт не является курсивом, я также не может использовать угол наклона, чтобы исправить это.

Я попытался получить доступ к глифам напрямую и с помощью CTFontCreatePathForGlyph(), но не смог, поскольку CGGlyph и UniChar являются 16-битными, и мне нужны 32-битные символы.

Кто-нибудь знает, что я делаю что-то неправильно? Если да, то какой правильный путь?

Update:

Чтобы убедиться, что это не проблема, связанная с шрифтом, я использовал разные шрифты. Проблема существует даже для символов ASCII в Arial Italic.

Update:

Игнорировать мое предыдущее обновление! Оказывается, это одна (проблема с Arial Italic) была моей собственной ошибкой. Первая проблема все еще стоит.

Ответ 1

После отчета об ошибке, который я сделал, очевидно, это проблема CoreText, появляющаяся в редких случаях. Сообщает вам, как только я нахожу исправление.

Обновление: 15 марта '12

Я забыл обновить это раньше, но это исправлено. Исправление находится в OS X Lion/iOS 5.

Ответ 2

Насколько я могу судить, CTLineGetImageBounds - это правильная функция для использования. Я предлагаю подать отчет об ошибке в RadarWeb.