Верхний индекс, нижний текст с базовым текстом iPhone - PullRequest
1 голос
/ 22 июля 2011

Может кто-нибудь объяснить мне, как рисовать верхний и нижний алфавит с помощью Core Text?

Спасибо.

Ответы [ 2 ]

1 голос
/ 18 августа 2011

Я заметил, что этот вопрос немного стар, я надеюсь, что вам все еще нужна помощь в этом вопросе, и что этот пост поможет вам.

вы можете использовать NSAttributedString (или его изменяемый аналог NSMutableAttributedString), чтобы назначать различные атрибуты (например, шрифт, имя и размер) для определенных диапазонов одной строки.

Надстрочный и нижний индекс не поддерживаются основным текстом, и чтобы они выглядели хорошо, вам может потребоваться проделать довольно большую работу. К счастью, существует проект с открытым исходным кодом, разработанный Оливером Дробником из генетики какао, который позволяет вам легко конвертировать HTML в NSAttributedString (или NSMutableAttributedString), передавать его в настраиваемое текстовое представление и показывать надстрочные индексы и индексы (наряду со многими другими HTML и CSS), так как они появится в UIWebview, но без необходимости использовать UIWebview. Вы можете скачать проект с здесь .

Несмотря на то, что много усилий было вложено в этот проект, есть две оговорки:

  1. Время от времени вычисления могут быть очень интенсивными.
  2. Пока поддерживаются не все HTML-теги и функции CSS.
0 голосов
/ 10 января 2013

ЕСЛИ NSAttributedString является приемлемым решением, вы можете создать эффект надстрочного индекса или индекса при помощи NSAttributedString, а не Core Text.Вот как я это сделал:

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:myString];
// Everything except the first character is rendered with the regular size / position
[str addAttribute:NSFontAttributeName 
     value:font 
     range:NSMakeRange(1, [amountString length]-1)];  // Everything except the first character is rendered with the regular size / position
// First character is 5/8 normal size
[str addAttribute:NSFontAttributeName 
     value:[UIFont fontWithName:initialFont.fontName 
     size:initialFont.pointSize/8*5] 
     range:NSMakeRange(0, 1)];
// Set the baseline offset to push the first character into a superscript position
[str addAttribute:@"NSBaselineOffset" 
     value:[NSNumber numberWithFloat:initialFont.pointSize*1/3] 
     range:NSMakeRange(0, 1)];  

Ключевыми строками являются последние две, которые уменьшают размер текста сценария super / sub и изменяют его вертикальное положение.Стоит отметить, что я использую строку (@ "NSBaselineOffset") вместо определенной константы имени атрибута (NSBaselineOffsetAttributeName).Из того, что мне удалось собрать, я считаю, что NSBaselineOffsetAttributeName определено в библиотеках для Mac, но не для iOS (для которого я разрабатывал, когда придумал это).В результате я использовал саму строку имени, а не константу для имени атрибута.

...