NSAttributedString上标样式
我想在一个文本块(合法免责声明,自然;))上NSAttributedString
所有的®字符的实例,默认方式NSAttributedString
不是很好。
如果我只是让字符被使用,而且只使用未经修改的NSString
,它将被渲染成与大写字母相同的大小,并且大致位于基线。 如果我将上标属性添加到NSAttributedString
,如下所示:
[attrStr setAttributes:@{(NSString *)kCTSuperscriptAttributeName : @1} range:NSMakeRange(locationOfReg, 1)];
angular色被抬离基线,其大小不变,但行间距现在受到影响,因为升起的angular色会侵入上面的行。
为了显示:
我在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))