NSAttributedString上标样式

时间:2014-01-28 20:21:40

标签: ios nsattributedstring core-text

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

如果我只是让角色成为且仅使用未经修改的NSString,则其呈现与大写字母相同的大小并且大致位于基线处。如果我将上标属性添加到NSAttributedString,如下所示:

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

角色从基线抬起,其大小不变,但线间距现在受到影响,因为凸起的角色会侵入上面的线。

举例说明:

variants of (R)

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

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

4 个答案:

答案 0 :(得分:67)

以下代码似乎可以解决问题:

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

答案 1 :(得分:6)

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

答案 2 :(得分:2)

快捷键5

    let fnt = UIFont(name:"Helvetica", size:20.0)
    let attributedString = NSMutableAttributedString(string:"2.099", attributes:[NSAttributedString.Key.font : fnt!])
    attributedString.setAttributes([NSAttributedString.Key.font : fnt!.withSize(10), NSAttributedString.Key.baselineOffset: 10], range: NSRange(location: 4, length: 1))

答案 3 :(得分:1)

Swift 4.2

在我的示例中,我想对一个无穷大符号实例进行下标,以便标签的标题如下所示: enter image description here

let font = UIFont(name: "Helvetica", size: 14.0)

let attributedString = NSMutableAttributedString(string: "Solids(ΔE∞)•G7®", attributes: [NSAttributedStringKey.font : font!])

attributedString.setAttributes([NSAttributedStringKey.baselineOffset: -5], range: NSRange(location: 9, length: 1))

solidsLbl.attributedText = attributedString