Я пытаюсь настроить CTFrame
, который точно соответствует моему текстовому формату UITextView
в iPad.
Прежде всего, я преобразовал текст UITextView
в строку с атрибутами. Затем я настраиваю ширину и высоту поля рисования, в котором Core Text будет рисовать текст.
Мне удалось нарисовать текст с помощью Core Text, но UITextView
и Core Text показывают несколько разные результаты, хотя я использовал тот же шрифт и размер.
В частности, когда я использовал [UIFont systemFontOfSize: 21]
, каждое пространство в UITextView
содержало на один пиксель больше, чем результат Core Text.
Это нормально для короткого предложения или слова, но если UITextView
и Core Text содержат несколько строк, их результат будет сильно отличаться. Например, UITextView
выполняет перенос слова для одного слова в конце строки, в то время как Core Text сохраняет это слово в той же строке. Если вы видите прикрепленное изображение, значит, начальные позиции последнего слова «абзац» уже сильно различаются (промежуток в 8 пикселей из-за 8 символов пробела).
Еще хуже, если я использую другие шрифты, такие как добавленный в мой проект, каждый символ в UITextView
имеет на 1 пиксель больше.
I ' m, используя Core Text, чтобы найти позицию в пикселях текущего курсора в UITextView
, поэтому оба они должны идеально соответствовать друг другу, содержать одинаковое количество символов и слов в каждой строке.
Вопрос: Есть ли способ создать объект Core Text, который идеально соответствует текстовому формату UITextView?
Спасибо!
Вот код, как я настраиваю строку с атрибутами. (Я просто следил за Core Text Guide.)
CTFontRef font = CTFontCreateWithName((CFStringRef) [UIFont systemFontOfSize:21.0].fontName, 21.0, NULL);
CFMutableAttributedStringRef attrString2 = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
CFAttributedStringReplaceString (attrString2, CFRangeMake(0, 0), (CFStringRef) string);
CFAttributedStringSetAttribute(attrString2, CFRangeMake(0, [string length]),kCTFontAttributeName, font);
Вот изображение.