You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift Label能否用Attributed String实现多色可变格式文本?

用单个UILabel实现多行多色文本(含变量)

当然可以!完全不需要用多个Label,靠NSAttributedString就能轻松实现你要的效果,而且变量插入也很方便。下面直接上具体实现步骤和代码:

核心思路

  • 先拼接好包含换行符的完整文本,把变量m、t、p插入对应位置
  • 给不同行的文本分别设置颜色属性
  • 将带属性的字符串赋值给Label,并开启多行显示

完整Swift代码示例

// 先定义你的变量
let m = 85
let t = 100
let p = 3

// 拼接两行文本,用换行符"\n"分隔
let firstLine = "marks/total:\(m)/\(t)"
let secondLine = "position:\(p)"
let fullText = "\(firstLine)\n\(secondLine)"

// 创建可变属性字符串,方便修改不同片段的属性
let attributedText = NSMutableAttributedString(string: fullText)

// 给第一行设置蓝色
let firstLineRange = (fullText as NSString).range(of: firstLine)
attributedText.addAttribute(
    .foregroundColor,
    value: UIColor.blue,
    range: firstLineRange
)

// 给第二行设置红色
let secondLineRange = (fullText as NSString).range(of: secondLine)
attributedText.addAttribute(
    .foregroundColor,
    value: UIColor.red,
    range: secondLineRange
)

// 可选:设置行间距,让排版更美观
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 6 // 按需调整行间距
attributedText.addAttribute(
    .paragraphStyle,
    value: paragraphStyle,
    range: NSRange(location: 0, length: fullText.count)
)

// 把属性字符串赋值给Label,并开启多行显示
yourLabel.attributedText = attributedText
yourLabel.numberOfLines = 0 // 0表示自动适配行数

关键细节说明

  • 使用NSMutableAttributedString是因为它支持动态修改不同文本范围的属性,比不可变的NSAttributedString更灵活
  • 用NSString的range(of:)来获取文本范围,是因为Swift原生String的范围处理和UIKit里的属性字符串API不太兼容,转成NSString能避免很多坑
  • 必须设置numberOfLines = 0,否则Label只会显示第一行内容

这样就搞定啦,只用一个Label就实现了不同行不同颜色的效果,变量也完美插入到了对应位置~

内容的提问来源于stack exchange,提问作者user1101733

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:15:14