SwiftUI 中带有丰富标记的文本视图(不仅仅是粗体和斜体文本)
Text view with rich markdown in SwiftUI (more than only bold and italic text)
Android
在我的应用程序中,我需要在视觉上设置样式并突出显示来自数据库的长文本。正文如下:
Accept the <f>current</f> situation and <f>then</f> try to build a better one on top of it. Only then will you catch a break from all that getting away and will be able to think about how to actually improve.
<h>Resistance deepens the negative thoughts, acceptance releases them.</h>
在 Android,我获取这些文本并使用 Regex 解析它们,以将标签替换为适用于库的内容。我正在使用 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 项目中?
在 Fiverr 上的自由职业者的帮助下,我通过以下方式解决了它:
基本上手动解析标签并在一个数组中跟踪内容类型和顺序,同时在另一个数组中保持格式化 Texts
。然后我可以获取该内容并将其植入 ViewBuilder
主体功能。
不幸的是,SwiftUI 还不允许您更改 Text
的背景颜色,除非将其变成 some View
。所以我现在不得不使用其他类似的格式。
Android
在我的应用程序中,我需要在视觉上设置样式并突出显示来自数据库的长文本。正文如下:
Accept the <f>current</f> situation and <f>then</f> try to build a better one on top of it. Only then will you catch a break from all that getting away and will be able to think about how to actually improve.
<h>Resistance deepens the negative thoughts, acceptance releases them.</h>
在 Android,我获取这些文本并使用 Regex 解析它们,以将标签替换为适用于库的内容。我正在使用 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 项目中?
在 Fiverr 上的自由职业者的帮助下,我通过以下方式解决了它:
基本上手动解析标签并在一个数组中跟踪内容类型和顺序,同时在另一个数组中保持格式化 Texts
。然后我可以获取该内容并将其植入 ViewBuilder
主体功能。
不幸的是,SwiftUI 还不允许您更改 Text
的背景颜色,除非将其变成 some View
。所以我现在不得不使用其他类似的格式。