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
相关产品推荐
相关产品推荐

