如何在 SwiftUI 中显示长文本/文章?

问题描述 投票:0回答:1

我正在尝试制作一个博客类型的应用程序。我还不知道如何在 SwiftUi 中正确显示好看的文本。这篇文章是 DIN4 纸上的几页,有很多段落。我对 SwiftUi 或一般编码比较陌生,所以这就是我的每个段落的样子:

Text("Random Text to fill in about a paragraph to show how my code looks. I don't know if anyone will read this but I'm writing it anyway.")
       .font(.body)
       .frame(maxWidth: .infinity, alignment: .leading)
       .padding(.init(top: 16, leading: 16, bottom: 0, trailing: 0))
       //or .padding(.init(top: 16, leading: 16, bottom: 8, trailing: 8))

我遇到的问题是应用程序超载。文本模块太多,导致加载时间过长或根本无法加载。 如何轻松展示一篇好看的文章,让我写得更快?

xcode text blogs swiftui
1个回答
0
投票

一个选择是为每篇文章使用 Markdown 文件。

在 iOS 15 中,Apple 为 SwiftUI 文本视图添加了原生 markdown 支持。

不幸的是,它只支持 Markdown 功能的一个子集:粗体、斜体、链接、删除线和等宽。

不支持标题、有序或无序列表或图像。

您可以像这样在 Text() 中直接显示降价:

Text("Markdown **bold**")
Text("This is *italic*")
Text("Strike through text like this ~~striken through~~")
Text("`monospaced text`")
Text("Link: [Link text](www.iiroalhonen.com)")

或者您可以从这样的文件中显示它:

struct markdownFileView: View {
    // Get the path to your markdown file.
    let filepath = Bundle.main.url(forResource: "markdownFileName", withExtension: "md")
    
    var body: some View {
        // Show the markdown here
        Text(try! AttributedString(
                      contentsOf: filepath!,
                      options: AttributedString.MarkdownParsingOptions(
                            interpretedSyntax: .inlineOnlyPreservingWhitespace
                        )))
    }
}

如果您想要换行符,

options: AttributedString.MarkdownParsingOptions(interpretedSyntax: .inlineOnlyPreservingWhitespace
很重要,没有它会遇到一个大文本块。

一个重要提示: 如果您直接在 Xcode 中将文章作为 markdown 文件添加,有时将您的 markdown 文件拖动到资产不会将其添加到您的应用程序包中。

这意味着当您运行该应用程序时,它找不到文件,因此

filepath
将为零,因此使用
!
强制解包将导致崩溃。

因此请确保您的文件包含在构建阶段 > 复制捆绑资源中,方法是按照此 SO 中的说明在此处回答

通过这样做,您可以在 SwiftUI 应用程序中显示用简单的 markdown 编写的长篇文章。

我发现这篇文章很有帮助-https://iiroalhonen.medium.com/displaying-markdown-using-swiftui-e16131a9dc52

我找到了新行未在此处呈现的解决方案 - https://developer.apple.com/forums/thread/682957

© www.soinside.com 2019 - 2024. All rights reserved.