iOS 13中NSMutableAttributedString无法追加,iOS12及以下正常
嘿,这个问题我之前也踩过坑!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
相关产品推荐
相关产品推荐

