Я пытаюсь найти границы строки текста в 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) была моей собственной ошибкой. Первая проблема все еще стоит.