NSAttributedString上标样式

我想在一个文本块(合法免责声明,自然;))上NSAttributedString所有的®字符的实例,默认方式NSAttributedString不是很好。

如果我只是让字符被使用,而且只使用未经修改的NSString ,它将被渲染成与大写字母相同的大小,并且大致位于基线。 如果我将上标属性添加到NSAttributedString ,如下所示:

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

angular色被抬离基线,其大小不变,但行间距现在受到影响,因为升起的angular色会侵入上面的行。

为了显示:

(R)

我在Photoshop中创build了这个图像,通过减less字符的大小和移动基线来实现所需的位置。 我知道如何改变iOS的字体大小,但改变基线似乎更棘手。 有关如何实现这一目标的任何build议?

编辑:我想我可以使用上标属性作为一种方法来改变基线。 现在想出一种方法来获取当前的字体大小,并随后减less它以允许在不同大小的文本块上使用相同的方法。

下面的代码似乎可以做到这一点:

 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)]; 

在这里输入图像说明

Swift版本:

 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))