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

UILabel设置NSMutableAttributedString换行后第二行内容不显示问题求助

解决UILabel中NSMutableAttributedString换行后第二段消失的问题

嘿,我帮你定位到了问题的两个核心原因,结合Apple文档的规则,给你整理了可行的解决方案:

问题根源

  1. UILabel默认只显示1行:你没设置numberOfLines属性,默认值是1,哪怕加了换行符,标签也只会渲染第一行,后面的内容直接被截断了。
  2. 追加的文本未继承段落样式:你只给第一段文本配置了paragraphStyle,但第二段文本没有应用这个样式,这会导致多行布局时出现异常。

修正后的完整代码

首先,调整UILabel的初始化,允许显示多行:

var totalVisitsLabel: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.numberOfLines = 0 // 关键:设置为0表示自动适配行数
    return label
}()

然后,统一配置段落样式并应用到两段文本上:

// 创建通用段落样式
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
paragraphStyle.lineBreakMode = .byWordWrapping
paragraphStyle.lineSpacing = 4 // 可选:添加行间距让排版更美观

// 第一段数字文本
let countString = NSMutableAttributedString(
    string: "\(visitLogs.count)",
    attributes: [
        .font: UIFont.systemFont(ofSize: 25),
        .foregroundColor: UIColor.black, // 可根据需求修改颜色
        .paragraphStyle: paragraphStyle
    ]
)

// 第二段描述文本(包含换行符)
let descString = NSMutableAttributedString(
    string: "\nTotal visits",
    attributes: [
        .font: UIFont.systemFont(ofSize: 14),
        .foregroundColor: UIColor.gray, // 可选:用不同颜色区分
        .paragraphStyle: paragraphStyle
    ]
)

// 拼接两段文本
countString.append(descString)

// 赋值给标签
totalVisitsLabel.attributedText = countString

额外小贴士

  • 确保你的标签有明确的宽度约束(比如固定宽度或者和父视图边缘绑定),这样文本才能正确换行。
  • 不用额外调用sizeToFit(),只要numberOfLines设为0,Auto Layout会自动计算标签的高度。
  • 可以通过打印totalVisitsLabel.attributedText的属性,验证每一段的样式是否正确应用。

这样修改后,两段不同字体的文本就能正常上下排列显示啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:47:29