markdown-webview

MarkdownWebView 是一个性能出色的 SwiftUI 视图,用于渲染 Markdown 内容。

我说它出色是因为它底层的视图是 WKWebView,但包含大量 MarkdownWebView 的 SwiftUI 滚动视图仍然可以平滑滚动。使用原生 SwiftUI 视图构建的类似视图没有这种性能(希望以后会有)。

v3.mp4

特性

自动调整视图高度

视图的高度始终等于内容的高度。

Auto-adjusting View Height
文本选择 Text Selection
动态内容
v3.mp4
语法高亮代码语法会自动高亮显示。

支持平台

安装

将此包添加为依赖项。

请参阅文章 “将包依赖项添加到您的应用” 以了解更多信息。

用法

显示 Markdown 内容

import SwiftUI
import MarkdownWebView

struct ContentView: View {
    @State private var markdownContent = "# Hello World"

    var body: some View {
        NavigationStack {
            MarkdownWebView(markdownContent)
        }
    }
}

自定义样式

该视图带有一个默认样式(CSS 文件),适用于许多用例。

您还可以通过在初始化程序中设置 customStylesheet 参数来提供自己的样式表。

import SwiftUI
import MarkdownWebView

struct ContentView: View {
    @State private var markdownContent = "# Hello World"
    private let stylesheet: String? = try? .init(contentsOf: Bundle.main.url(forResource: "markdown", withExtension: "css")!)
    
    var body: some View {
        NavigationStack {
            MarkdownWebView(markdownContent, customStylesheet: stylesheet)
        }
    }
}

处理链接

默认情况下,该视图使用默认浏览器打开链接。

您可以通过在初始化程序中设置 onLinkActivation 参数来自己处理链接激活。

import SwiftUI
import MarkdownWebView

struct ContentView: View {
    @State private var markdownContent = "# Hello apple.com"
    
    var body: some View {
        NavigationStack {
            MarkdownWebView(markdownContent)
                .onLinkActivation { url in
                    print(url)        
                }
        }
    }
}

macOS 应用的要求

底层 Web 视图加载一个 HTML 字符串。 要使该包在 macOS 应用程序中工作,请启用“Outgoing Connections (Client)”功能。

在 Xcode 中的外观

Outgoing Connections (Client)

鸣谢

该软件包的部分内容可能使用以下受版权保护的材料,特此确认其使用。