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

ve7v8dk2  于 2023-04-07  发布在  Swift
关注(0)|答案(1)|浏览(209)

我正在尝试制作一个博客类型的应用程序。我还不知道如何在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))

我遇到的问题是我超载的应用程序。有太多的文本模块,需要太长时间或根本不加载。我如何轻松地显示一个好看的文章,使我更容易写得更快?

vd2z7a6w

vd2z7a6w1#

一种选择是为每篇文章使用Markdown文件。
在iOS 15中,Apple为SwiftUI文本视图添加了本地markdown支持。
不幸的是,它只支持Markdown功能的一个子集,即:粗体、斜体、链接、删除线和等宽线。
不支持标题、有序或无序列表或图像。
你可以直接在Text()中显示markdown,如下所示:

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是重要的,如果你想换行,没有它运行到一个大的文本blob。

**一个重要的注意事项:**如果您直接在Xcode中将您的文章作为markdown文件添加,有时将您的markdown文件拖到Assets并不会将其添加到您的应用程序捆绑包中。

这意味着当你运行应用程序时,它不会找到一个文件,所以filepath将为nil,所以用!强制解包将导致崩溃。
因此,请确保您的文件已包含在following the instructions in this SO answer here的构建阶段〉复制捆绑包资源中
通过这样做,您可以在SwiftUI应用程序中显示用简单的markdown编写的长文章。
我觉得这篇文章很有帮助-https://iiroalhonen.medium.com/displaying-markdown-using-swiftui-e16131a9dc52
我找到了解决新行没有在这里呈现的方法-https://developer.apple.com/forums/thread/682957

相关问题