Я пытаюсь найти границы строки текста в Базовом тексте. Для простоты предположите, что она имеет отдельный символ. В данный момент я использую следующий метод:
line = CTLineCreateWithAttributedString(attrString);
rect = CTLineGetImageBounds(line, context);
Это работает большинство времен, но для некоторых символов, как математический курсив d (Unicode: 0x1D451) или математический курсив q (Unicode: 0x1D45E), ширина немного коротка.
Я пытался использовать CTLineGetTypographicBounds()
или CTFramesetterSuggestFrameSizeWithConstraints
, но они не помогли ни одному (я думаю, что они используют усовершенствование глифа для нахождения ширины, не ее графической ширины.), Поскольку сам шрифт не является курсивом, я также не могу использовать наклонный угол для исправления этого.
Я пытался получить доступ к глифам непосредственно и использовать CTFontCreatePathForGlyph()
, но отказавший, поскольку CGGlyph и UniChar составляют и 16 битов, и мне нужны 32-разрядные символы.
Кто-либо знает, делаю ли я что-то не так? Если так, каков правильный путь?
Обновление:
Для проверки это не проблема, связанная со шрифтом, я использовал различные шрифты. Проблема существует даже для символов ASCII в Курсиве Arial.
Обновление:
Проигнорируйте мое предыдущее обновление! Оказывается, что этот (проблема с Курсивом Arial) был моей собственной ошибкой. Первая проблема все еще стоит все же.
В соответствии с моим отчетом об ошибке, очевидно, это проблема CoreText, возникающая в редких случаях. Сообщу вам, как только найду исправление.
Обновление: 15 марта '12 г.
Я забыл обновить это раньше, но это исправлено. Исправление находится в OS X Lion / iOS 5.
Насколько я могу судить, CTLineGetImageBounds
- правильная функция для использования. Я предлагаю заполнить отчет об ошибке в RadarWeb .