【问题标题】:NSAttributedString superscript stylingNSAttributedString 上标样式
【发布时间】:2014-02-20 08:43:39
【问题描述】:

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

如果我只是让字符存在并且只使用未修改的NSString,它会呈现为与大写字母相同的大小,并且大约位于基线处。如果我将上标属性添加到NSAttributedString 如下:

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

字符被抬离基线,它的大小没有改变,但是现在行间距会受到影响,因为抬高的字符会侵入上面的行。

举例说明:

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

编辑:我想我可以使用上标属性作为向上移动基线的一种方式。现在最好想办法获取当前字体大小并随后减小它以允许在不同大小的文本块上使用相同的方法。

【问题讨论】:

    标签: ios nsattributedstring core-text


    【解决方案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)];
    

    【讨论】:

    • 不能让它在 iOS 6 中工作。你能提供 iOS 6 的替代品吗?
    • 刚刚在 iOS 7 下测试并添加了不会崩溃的 fnt 声明。
    • @AlexZavatone 谢谢!抱歉,不得不删除评论,因为它并不真正相关;)
    • 啊哈,DOH!这就是我复制和粘贴所得到的!
    • 注意:在 iOS 13 上,如果将最大和最小行高设置为相同的值,似乎会出现问题。我以为是因为这个基线偏移,但不是:stackoverflow.com/a/58199208/1156575
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      斯威夫特 4.2

      在我的示例中,我想为一个无穷大符号实例下标,因此我的标签标题将如下所示:

      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
      

      【讨论】:

      • 支持更新的 Swift 名称 (NSAttributedStringKey.*),但您忘记更改 ® 的偏移量以匹配您的插图和问题要求。
      【解决方案4】:

      斯威夫特 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))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 2018-01-07
        • 2012-10-10
        • 2013-10-21
        • 1970-01-01
        相关资源
        最近更新 更多