Swift中能否用Markdown内联语法设置指定字体权重?有无简便替代方案?
SwiftUI 行内文本自定义字体权重实现方案
1. Markdown内联语法的局限性
SwiftUI 的 Text 组件中,** 这类Markdown粗体语法无法自定义指定具体字体权重(比如.bold/.heavy),它的权重是基于当前Text的基础字体相对提升的——像你代码里的情况,基础权重是.thin,**会把对应文本提升到medium级别,但没法直接设置到bold或heavy。
2. 无需HStack的简便实现方案
可以用AttributedString实现精准的行内字体权重控制,原生支持文本对齐,不需要手动调整布局:
写法一:利用AttributedString的DSL语法
struct ContentView: View { var body: some View { let richText = AttributedString { "10" .font(.system(size: 24, weight: .heavy, design: .rounded)) " Days" .font(.system(size: 24, weight: .medium, design: .rounded)) } Text(richText) } }
写法二:动态匹配文本片段设置属性
如果需要处理动态生成的文本,可以手动匹配字符范围设置权重:
var customRichText: AttributedString { var text = AttributedString("10 Days") // 给"10"设置heavy权重 if let range = text.range(of: "10") { text[range].font = .system(size: 24, weight: .heavy, design: .rounded) } // 给"Days"设置medium权重 if let range = text.range(of: "Days") { text[range].font = .system(size: 24, weight: .medium, design: .rounded) } return text } // 在视图中使用 Text(customRichText)
3. 为什么不选HStack拆分Text?
用HStack拆分多个Text需要手动处理字符间距、基线对齐等细节,而AttributedString是SwiftUI原生的富文本方案,能自动保持文本的自然排版逻辑,代码更简洁易维护。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

