Подтвердить что ты не робот

NSAttributedString надстрочный стиль

Я хочу, чтобы надстроить все экземпляры символа ® в блоке текста (правовая оговорка, естественно;)), а способ по умолчанию NSAttributedString не очень хорош.

Если я просто позволю символу использовать и не использовать немодифицированный NSString, он будет иметь тот же размер, что и заглавная буква, и будет размещен примерно на базовой линии. Если я добавлю атрибут superscript к NSAttributedString следующим образом:

[attrStr setAttributes:@{(NSString *)kCTSuperscriptAttributeName : @1} range:NSMakeRange(locationOfReg, 1)];

Символ снимается с базовой линии, его размер не изменяется, но теперь интервал между линиями влияет на то, что поднятый символ в противном случае вторгнется в линию выше.

Чтобы проиллюстрировать:

variants of (R)

Я создал это изображение в Photoshop, где желаемое положение было достигнуто за счет уменьшения размера символа и смещения базовой линии. Я знаю, как изменить размер шрифта в iOS, но изменение базовой линии кажется более сложным. Любые предложения о том, как достичь этого?

Изменить: я полагаю, что я мог бы использовать атрибут superscript как способ сдвинуть базовую линию вверх. Теперь было бы здорово выяснить способ получения текущего размера шрифта и впоследствии уменьшить его, чтобы тот же метод использовался на блоках текста разного размера.

4b9b3361

Ответ 1

Следующий код, похоже, делает трюк:

UIFont *fnt = [UIFont fontWithName:@"Helvetica" size:20.0];

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"GGG®GGG"
                                                                                     attributes:@{NSFontAttributeName: [fnt fontWithSize:20]}];
[attributedString setAttributes:@{NSFontAttributeName : [fnt fontWithSize:10]
                                  , NSBaselineOffsetAttributeName : @10} range:NSMakeRange(3, 1)];

enter image description here

Ответ 2

Быстрая версия:

let fnt = UIFont(name:"Helvetica", size:20.0)
let attributedString = NSMutableAttributedString(string:"GGG®GGG", attributes:[NSFontAttributeName : fnt!])
attributedString.setAttributes([NSFontAttributeName : fnt!.fontWithSize(10), NSBaselineOffsetAttributeName: 10], range: NSRange(location: 3, length: 1))