首页 > 解决方案 > SwiftUI 中带有丰富 markdown 的文本视图(不仅仅是粗体和斜体文本)

问题描述

安卓

在我的应用程序中,我需要在视觉上设置样式并突出显示来自数据库的长文本。正文如下:

接受<f>当前</f>的情况,<f>然后</f>尝试在此基础上建立一个更好的情况。只有这样,你才能从所有的逃避中得到休息,并能够思考如何真正改进。
<h>抗拒加深消极思想,接受释放消极思想。</h>

在 Android 上,我获取这些文本并使用正则表达式对其进行解析,以将标签替换为适用于库的内容。我正在使用SRML库来显示它,如下所示:

安卓截图


iOS

现在我的问题是:如何在 iOS 上获得类似的体验?

到目前为止,我正在使用 SwiftUI,但我可以看到它在这方面非常有限。到目前为止,我发现的所有库都可以帮助您使其粗体、斜体或其他非常小的东西:

但我特别需要突出显示短语,这意味着将它们的背景涂成黄色。然后我找到了这个库,它提供了一些非常复杂的功能,但是是用 Objective-C 编写的,我不知道它在我的 SwiftUI 基础上的效果如何:https ://github.com/ibireme/YYText


我有机会让它与 SwiftUI 组件一起使用吗?

我最好的猜测是做这样的事情(非常基本的伪代码):

text = DB.getText
parser = StringParser(text)
content = ViewGroup()

while(parser.hasNextLine) { nextLine in
  if(nextLine.contains("<h>")) {
    var text = Text(nextLine)
                 .background(Color.yellow)
    content.add(text)
  } else if(...) {
    ...
  }

  // etc. etc.
}

Text并从多个部分逐步构建结果。但老实说,这看起来有点丑陋。还有其他想法吗?如果没有,我应该如何将 Cbjective-C 库包含到 SwiftUI 项目中?

标签: iostextswiftuimarkdown

解决方案


在 Fiverr 上的自由职业者的帮助下,我通过以下方式解决了这个问题:

https://stackoverflow.com/a/69871902/1972372

Texts基本上手动解析标签并跟踪数组中的内容类型和顺序,同时在另一个数组中保持格式化。然后我可以把这些内容植入到ViewBuilder身体功能中。

不幸的是,SwiftUI 还不允许您更改 aText的背景颜色,而无需将其转换为some View. 所以我现在不得不使用其他类似的格式。


推荐阅读