Я пытаюсь найти границы строки текста в Core Text. Для простоты предположим, что он состоит из одного символа. На данный момент я использую следующий метод:
line = CTLineCreateWithAttributedString(attrString);
rect = CTLineGetImageBounds(line, context);
В большинстве случаев он работает, но для некоторых символов, таких как математический курсив d (Unicode: 0x1D451) или математический курсив q (Unicode: 0x1D45E), ширина немного короче.
Я пробовал использовать CTLineGetTypographicBounds()
или CTFramesetterSuggestFrameSizeWithConstraints
, но они тоже не помогли (я думаю, они используют продвижение глифа, чтобы найти ширину, а не его графическую ширину). Поскольку сам шрифт не курсивный, я также не могу использовать наклонный угол для исправьте это.
Я попытался получить доступ к глифам напрямую и с помощью CTFontCreatePathForGlyph()
, но не смог, поскольку CGGlyph и UniChar являются 16-битными, а мне нужны 32-битные символы.
Кто-нибудь знает, делаю ли я что-нибудь не так? Если да, то каков правильный путь?
Обновление:
Чтобы убедиться, что проблема не связана со шрифтом, я использовал другие шрифты. Проблема существует даже для символов ASCII в Arial Italic.
Обновление:
Игнорируйте мое предыдущее обновление! Оказывается, это (проблема с Arial Italic) была моя собственная ошибка. Однако первая проблема все еще актуальна.