使用多种字体大小强制 NSAttributedString 行高

Posted

技术标签:

【中文标题】使用多种字体大小强制 NSAttributedString 行高【英文标题】:Force NSAttributedString line height with multiple font sizes 【发布时间】:2020-03-20 15:40:53 【问题描述】:

我正在尝试使用具有相同行高的不同字体大小来显示属性字符串,这是我迄今为止尝试过的:

let paraStyle = NSMutableParagraphStyle()
paraStyle.maximumLineHeight = 30

let username = NSMutableAttributedString(string: user.username, attributes: [
    NSAttributedString.Key.font: UIFont(name: "Oswald-Medium", size: 17) as Any,
    NSAttributedString.Key.foregroundColor: UIColor(named: "DarkColor") as Any,
    NSAttributedString.Key.paragraphStyle: paraStyle
])

let onlineColor = UIColor(named: user.online ? "OnlineColor" : "OfflineColor")
let online = NSMutableAttributedString(string: "• ", attributes: [
    NSAttributedString.Key.font: UIFont.systemFont(ofSize: 24) as Any,
    NSAttributedString.Key.foregroundColor: onlineColor as Any,
    NSAttributedString.Key.baselineOffset: -4
])

let text = NSMutableAttributedString(string: content, attributes: [
    NSAttributedString.Key.font: UIFont(name: "Oswald-Regular", size: 14) as Any,
    NSAttributedString.Key.foregroundColor: UIColor(named: "TextColor") as Any
])

username.append(online)
username.append(text)

结果如下所示,我希望第一行的高度与其他行相同。

我玩过lineSpacinglineHeightMultiple,但总是有差距,知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

将此添加到您的在线和文本中(NSMutableAttributedString):

    NSAttributedString.Key.paragraphStyle: paraStyle

【讨论】:

结果还是一样。

以上是关于使用多种字体大小强制 NSAttributedString 行高的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 CRichEditCtrl 中的文本选择是不是具有多种字体大小?

设置一个label显示多种颜色,多种字体大小

SpannableStringBuilder 创建具有多种字体/文本大小等的字符串示例?

如何使用 TextRenderer 绘制多种大小的文本对齐? [复制]

按钮文本中的多种字体大小

单个 UITableview 单元格中的多种字体大小 (Swift)