NSAttributedString上标样式

Sal*_*uts 31 nsattributedstring core-text ios

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

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

[attrStr setAttributes:@{(NSString *)kCTSuperscriptAttributeName : @1} range:NSMakeRange(locationOfReg, 1)];
Run Code Online (Sandbox Code Playgroud)

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

为了显示:

(R)的变体

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

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

kov*_*pas 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)];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 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))
Run Code Online (Sandbox Code Playgroud)


Aya*_*bar 5

雨燕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))
Run Code Online (Sandbox Code Playgroud)