如何在 SwiftUI 文本中显示 HTML 或 Markdown?

新手上路,请多包涵

如何设置 SwiftUI Text 以显示呈现的 HTML 或 Markdown?

是这样的:

 Text(HtmlRenderedString(fromString: "<b>Hi!</b>"))

或对于医学博士:

 Text(MarkdownRenderedString(fromString: "**Bold**"))

也许我需要一个不同的视图?

原文由 Div 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

Text 只能显示 String s.您可以将 UIViewRepresentableUILabelattributedText 一起使用。

可能稍后会为 SwiftUI.Text 提供 attributedText 文本支持。

原文由 Ugo Arangino 发布,翻译遵循 CC BY-SA 4.0 许可协议

iOS 15(测试版)

文本现在支持基本的 Markdown!

 struct ContentView: View {
    var body: some View {
        VStack {
            Text("Regular")
            Text("*Italics*")
            Text("**Bold**")
            Text("~Strikethrough~")
            Text("`Code`")
            Text("[Link](https://apple.com)")
            Text("***[They](https://apple.com) ~are~ `combinable`***")
        }
    }
}

结果:

降价结果


但是,如果您在属性中存储包含 Markdown 的 String ,它不会呈现。我很确定这是一个错误。

 struct ContentView: View {
    @State var textWithMarkdown = "***[They](https://apple.com) ~are~ `combinable`***"
    var body: some View {
        Text(textWithMarkdown)
    }
}

结果:

文本不呈现 Markdown 而是呈现原始字符串

您可以通过使用 init(markdown:options:baseURL:) AttributedString --- 转换为 textWithMarkdown 来解决此问题。

 struct ContentView: View {
    @State var textWithMarkdown = "***[They](https://apple.com) ~are~ `combinable`***"
    var body: some View {
        Text(textWithMarkdown.markdownToAttributed()) /// pass in AttributedString to Text
    }
}

extension String {
    func markdownToAttributed() -> AttributedString {
        do {
            return try AttributedString(markdown: self) /// convert to AttributedString
        } catch {
            return AttributedString("Error parsing markdown: \(error)")
        }
    }
}

结果:

降价呈现

原文由 aheze 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题