Я пытаюсь настроить CTFrame
, который точно соответствует текстовому формату моего UITextView
в iPad.
Прежде всего, я преобразовал текст UITextView
в строку с атрибутом. Затем я установил ширину и высоту окна рисования, в котором Core Text будет рисовать текст.
Мне удалось нарисовать текст с использованием Core Text, но UITextView
и Core Text показывают немного разные результаты, хотя я использовал тот же шрифт и размер.
В частности, когда я использовал [UIFont systemFontOfSize:21]
, каждый пробел в UITextView
имеет на один пиксель больше, чем результат Core Text.
Это нормально для короткого предложения или слова, но если UITextView
и Базовый текст состоят из нескольких строк, их результат становится совсем другим. Например, UITextView
выполняет перенос слов для одного слова в конце строки, в то время как Core Text сохраняет это слово в той же строке. Если вы видите прикрепленное изображение, начальные позиции последнего слова «абзац» уже сильно отличаются (8-пиксельный разрыв из-за 8 пробелов).
Что еще хуже, если я использую разные шрифты, такие как пользовательский шрифт, добавленный в мой проект, каждый символ в UITextView
имеет на 1 пиксель больше.
Я использую Core Text, чтобы найти пиксельную позицию текущего курсора в UITextView
, поэтому они оба должны идеально совпадать друг с другом, содержать одинаковое количество символов и слов в каждой строке.
Вопрос: Есть ли способ сделать объект Core Text, который идеально соответствует текстовому формату UITextView?
Спасибо!
Вот код, как я настраиваю атрибутивную строку. (Я просто следовал Основному текстовому руководству.)
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);
-
-
Вот картинка.