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

Swift5中UIButton富文本标题与副标题行间距差异化设置问题

解决UIButton富文本标题与副标题行间距不一致的问题

你的问题核心在于标题和副标题没有被划分为独立段落,直接拼接导致后添加的副标题段落样式覆盖了整个文本的段落设置,从而出现行间距统一的情况。要实现标题与副标题间的间距为a、副标题内部行间距为b,需要将两者拆分为两个独立段落,并通过段落样式的不同属性分别控制。

正确实现方案

我们需要:

  1. 在标题末尾添加换行符,将标题和副标题划分为两个独立段落
  2. 给标题段落设置paragraphSpacing(控制与下一段的间距,即你要的a值)和自身的行高
  3. 给副标题段落设置内部行高(即你要的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:控制当前段落与下一段落之间的间距,正好用来实现标题和副标题的间隔a
  • lineHeightMultiple:基于字体默认行高的倍数,用来控制段落内部每行的行高(副标题内部的间距b);如果需要固定像素值的行间距,改用lineSpacing属性更直观
  • 必须添加换行符\n,否则两个文本会被识别为同一个段落,后设置的段落样式会覆盖整个文本的样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:25:07