我正在使用一个实例UIWebView来处理一些文本并正确地着色它,它将结果作为HTML而不是显示在UIWebView我希望Core Text用a 显示它NSAttributedString.
我能够创建和绘制NSAttributedString但我不确定如何将HTML转换并将HTML映射到属性字符串.
据我所知,在Mac OS X下NSAttributedString有一个initWithHTML:方法,但这只是Mac的补充,不适用于iOS.
我也知道有一个类似的问题,但它没有答案,我虽然我会再试一次,看看是否有人创造了一种方法来做到这一点,如果是的话,他们是否可以分享它.
如何在 SwiftUI 中使用 AttributedString。没有可用于在文本中使用 AttributedString 的 API
我将UIWebView更改为WKWebView,但是,使用相同的html,WKWebView中的字体看起来比UIWebView中的字体要小.我不希望这种情况发生,所以有什么方法可以避免这种变化吗?
在斯威夫特,如图所示在这里,你可以使用“NSMutableAttributedString”在文本中嵌入的链接。
如何使用 SwiftUI 实现这一目标?
我按如下方式实现了它,但这看起来不像我想要的。
.
import SwiftUI
struct ContentView: View {
var body: some View {
HStack {
Text("By tapping Done, you agree to the ")
Button(action: {}) {
Text("privacy policy")
}
Text(" and ")
Button(action: {}) {
Text("terms of service")
}
Text(" .")
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想动态传送内容并显示超链接,但它不能动态传送并且不能工作
\nlet linkTitle = "Apple Link"\nlet linkURL = "http://www.apple.com"\nlet string = "[Apple Link](http://www.apple.com)"\n \nText(string) // Not working\n\nText("[Apple Link](http://www.apple.com)") // Working\n \nText("[\\(linkTitle)](http://www.apple.com)") // Working\n \nText("[\\(linkTitle)](\\(linkURL))") // Not working\n \nRun Code Online (Sandbox Code Playgroud)\n 将 lineBreakMode 设置为 byWordWrapping 并将 numberOfLines 设置为 0 似乎还不够:
struct MyTextView: UIViewRepresentable {
func makeUIView(context: Context) -> UILabel {
let label = UILabel()
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.text = "Here's a lot of text for you to display. It won't fit on the screen."
return label
}
func updateUIView(_ view: UILabel, context: Context) {
}
}
struct MyTextView_Previews: PreviewProvider {
static var previews: some View {
MyTextView()
.previewLayout(.fixed(width: 300, height: 200))
}
}
Run Code Online (Sandbox Code Playgroud)
无论我对 lineBreakMode 使用哪种设置,文本都不会换行。画布预览和实时预览都如下所示:
我得到的最接近的是设置 preferredMaxLayoutWidth,这确实会导致文本换行,但似乎没有一个值表示“无论视图大小如何”。
我认为这是 iOS 15 beta 1 或 2 的错误,但从 beta 4 开始我仍然看到这种行为,所以也许我做错了什么:文本应该用 Markdown 渲染 AttributedStrings。当直接字符串文字传递到文本中时,它似乎可以正确呈现,但当 AttributedString 是变量时,则无法正确呈现。我在做一些超级愚蠢的事情吗?
struct ContentView: View {
var text = AttributedString("**Hello**, `world`! Visit our [website](https://www.capitalone.com).")
var body: some View {
VStack {
Text("**Hello**, `world`! Visit our [website](https://www.capitalone.com).")
.padding()
Text(text)
.padding()
}
}
}
Run Code Online (Sandbox Code Playgroud)
目标是获得一个UILabel集成通孔UIViewRepresentable以相同的方式调整大小Text- 使用可用宽度并换行到多行以适应所有文本,从而增加HStack其所在的高度,而不是无限扩展宽度。这是非常相似的这个问题,但接受的答案不适合我使用涉及的布局工作ScrollView,VStack及HStack。
struct ContentView: View {
var body: some View {
ScrollView {
VStack {
HStack {
Text("Hello, World")
Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla tempor justo quam, quis suscipit leo sollicitudin vel.")
//LabelView(text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla tempor justo quam, quis suscipit leo sollicitudin vel.")
}
HStack {
Text("Hello, World")
Text("Lorem ipsum dolor sit amet, …Run Code Online (Sandbox Code Playgroud) 我需要在我的 swiftui 应用程序中渲染 html 字符串。
我发现这个: How to show HTML or Markdown in a SwiftUI Text?
但我尝试了那里的每一个解决方案,但我得到的是空白屏幕!
这是我的代码:
import SwiftUI
import WebKit
struct HTMLStringView: UIViewRepresentable {
let htmlContent: String
func makeUIView(context: Context) -> WKWebView {
return WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.loadHTMLString(htmlContent, baseURL: nil)
}
}
struct audioInfoView: View {
let longDetails: String
var body : some View{
ScrollView{
ZStack{
HTMLStringView(htmlContent: "<p>\(longDetails)</p>")
//Text(longDetails)
}.padding()
}.padding(.top,50)
}
}
Run Code Online (Sandbox Code Playgroud)
这let longDetails: String是一个带有 html 标签的字符串,它是从另一个视图传递的。
如果我这样做Text(longDetails) …