Swift5中UIButton富文本标题与副标题行间距差异化设置问题
你的问题核心在于标题和副标题没有被划分为独立段落,直接拼接导致后添加的副标题段落样式覆盖了整个文本的段落设置,从而出现行间距统一的情况。要实现标题与副标题间的间距为a、副标题内部行间距为b,需要将两者拆分为两个独立段落,并通过段落样式的不同属性分别控制。
正确实现方案
我们需要:
- 在标题末尾添加换行符,将标题和副标题划分为两个独立段落
- 给标题段落设置
paragraphSpacing(控制与下一段的间距,即你要的a值)和自身的行高 - 给副标题段落设置内部行高(即你要的b值)
修改后的代码如下:
let buttonText = NSMutableAttributedString() // 1. 配置标题段落样式:设置自身行高 + 与副标题的间距a let titleParagraphStyle = NSMutableParagraphStyle() titleParagraphStyle.lineHeightMultiple = 1 // 标题自身行高倍数 titleParagraphStyle.paragraphSpacing = a // 标题与副标题之间的间距(替换为你的实际值) let titleString = "\(title)\n" // 末尾加换行,分割段落 let titleAttributed = NSAttributedString(string: titleString, attributes: [ .font: UIFont.title3, .paragraphStyle: titleParagraphStyle ]) buttonText.append(titleAttributed) // 2. 配置副标题段落样式:设置内部行间距b let subtitleParagraphStyle = NSMutableParagraphStyle() subtitleParagraphStyle.lineHeightMultiple = 0.7 // 副标题内部行高倍数(替换为你的实际值) // 如果需要直接设置固定像素值的行间距,也可以用 lineSpacing 属性: // subtitleParagraphStyle.lineSpacing = b let subtitleAttributed = NSAttributedString(string: subtitle, attributes: [ .font: UIFont.body, .paragraphStyle: subtitleParagraphStyle ]) buttonText.append(subtitleAttributed) // 最后赋值给按钮 yourButton.setAttributedTitle(buttonText, for: .normal)
关键说明
paragraphSpacing:控制当前段落与下一段落之间的间距,正好用来实现标题和副标题的间隔alineHeightMultiple:基于字体默认行高的倍数,用来控制段落内部每行的行高(副标题内部的间距b);如果需要固定像素值的行间距,改用lineSpacing属性更直观- 必须添加换行符
\n,否则两个文本会被识别为同一个段落,后设置的段落样式会覆盖整个文本的样式
内容的提问来源于stack exchange,提问作者Rufus
相关产品推荐
相关产品推荐

