SwiftUI中字符串变量文本加粗失效问题及解决方法
原因解析
SwiftUI的Text组件对Markdown的解析支持,只针对字符串字面量做了特殊语法识别。当你把带Markdown标记的内容存在普通String类型变量里时,Text会把它当作纯文本直接渲染,不会解析其中的**这类格式标记——因为编译器没法提前判断这个变量里的内容是需要解析的Markdown文本。
而直接把带Markdown的字符串字面量传给Text时,编译器会在编译阶段就识别出这是带格式的内容,自动处理成富文本渲染。
解决办法
方法一:转成AttributedString解析Markdown
通过AttributedString(markdown:)方法,把普通字符串转换成支持Markdown解析的富文本类型,再传给Text:
let longString = """ imagine here is a really really long Text. **This is in bold**. This is not in bold """ struct ContentView: View { var body: some View { // 尝试解析Markdown,失败则显示原文本 if let attributedContent = try? AttributedString(markdown: longString) { Text(attributedContent) } else { Text(longString) } } }
方法二:指定变量类型为LocalizedStringKey
如果你的字符串不需要动态修改,直接把变量的类型声明为LocalizedStringKey,Text会像处理字面量一样解析它的Markdown格式:
let longString: LocalizedStringKey = """ imagine here is a really really long Text. **This is in bold**. This is not in bold """ struct ContentView: View { var body: some View { Text(longString) } }
内容的提问来源于stack exchange,提问作者Mobias
相关产品推荐
相关产品推荐

