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

iOS 13中NSMutableAttributedString无法追加,iOS12及以下正常

解决iOS 13中UIButton富文本仅显示第一行的问题

嘿,这个问题我之前也踩过坑!iOS 13对UIButton的富文本标题处理有个细节变化,导致你的换行内容被悄悄截断了,下面是具体的解决方案和原因分析:

问题原因

在iOS 12及更早版本中,UIButton会自动识别富文本里的换行符,并调整内部titleLabel的行数来适配多行内容;但从iOS 13开始,titleLabel默认的numberOfLines仍然保持为1(单行显示),这就导致第二行的"Extra Text"被直接截断隐藏了。

修复代码

只需要在设置富文本标题后,给按钮的titleLabel添加两行关键配置,再确保按钮有足够的显示空间即可:

let formattedString = NSMutableAttributedString()
formattedString.append(NSAttributedString(string: "First Line\n" , attributes:[NSAttributedStringKey.font:UIFont.systemFont(ofSize: 8.0), NSAttributedStringKey.foregroundColor : UIColor.white]))
formattedString.append(NSAttributedString(string: "Extra Text", attributes: [NSAttributedStringKey.foregroundColor : UIColor.white]))

self.setAttributedTitle(formattedString, for: .normal)

// 添加以下两行关键配置
self.titleLabel?.numberOfLines = 0 // 允许自动换行,显示所有行
self.titleLabel?.lineBreakMode = .byWordWrapping // 按单词换行,优化显示效果

// 如果按钮高度不足,可调整内边距让内容有足够空间
self.contentEdgeInsets = UIEdgeInsets(top: 6, left: 6, bottom: 6, right: 6)

额外说明

  • 如果你使用的是iOS 13+的SDK,建议把NSAttributedStringKey替换为NSAttributedString.Key(前者是iOS 12及之前的旧API,虽然兼容但不够规范)。
  • 确保按钮的布局约束或frame能容纳多行文本的高度,否则即使设置了numberOfLines=0,内容还是可能被裁剪。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:53:07