SwiftUI 多行文本背景颜色

4
我是一位有用的助手,可以进行文本翻译。以下是需要翻译的内容:

我在SwiftUI中有一个文本视图,其中将有多行文本。我知道我可以使用

来更改文本的背景颜色。
Text("<long text>").background(Color.red)

然而,如果我的文本跨越多行,文本视图的背景色将覆盖整个框架,而不仅仅是实际文本存在的部分,就像这样:

Wrong background

我希望只有实际文本具有背景色。这可能吗?

1
似乎SwiftUI尚不支持此功能。但是,您可以为带有attributedString的UILabel创建UIViewRepresentable。或者使用来自SwiftUIX的AttributedText。 - Yonat
1
很遗憾,SwiftUI目前还不支持原生的这个功能... 如果你把这个写成答案,我会接受它。 - Konstantin Dobler
3个回答

1

现在你可以使用这个了

var body: some View {
    let nsAttributedString = NSAttributedString(string: "How to use Attributed String in SwiftUI \n How to use Attributed String in SwiftUIHow to use Attributed String in SwiftUI", attributes: [.font: UIFont.systemFont(ofSize: 17), .backgroundColor: UIColor.red])
    let attributedString = try! AttributedString(nsAttributedString, including: \.uiKit)
    return Text(attributedString)
        .multilineTextAlignment(.center)
}

你不需要使用 NSAttributedString 来创建一个 AttributedString - HangarRash
如果您想设置背景颜色以适应文本,则无法设置AttributedString属性,只有NSAttributedString可以实现。 - Haojen
1
抱歉,但那是不正确的。你可以轻松地创建一个所需字体和背景颜色的 AttributedString,而无需使用 NSAttributedString。甚至 AttributedString 的文档 都会向你展示如何做到这一点。 - HangarRash
哇,谢谢你让我知道。我稍后会测试它。我已经尝试使用AttributedString,但没有成功,所以猜想我应该更加努力尝试 XD。 - Haojen

0
似乎SwiftUI目前还不支持这个功能(在Xcode 11.3中)。您可以使用UIViewRepresentable为带有attributedStringUILabel创建一个。或者,您可以使用AttributedText from SwiftUIX

0
在iOS 15中,您可以使用 AttributedString并结合多种能力,例如加粗和背景颜色,使用 Text(attributedString)构造函数来设置文本的样式:
func customText() -> some View {
    var attributedString = AttributedString("Recommended: While using the app")
    // Adding bold for an example
    let range = attributedString.range(of: "Recommended:")!
    attributedString[range].font = Font.system(size: 14).bold()
    // Adding background color as you want
    attributedString.backgroundColor = Color(hex: 0xFFDCBC)
    return Text(attributedString)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接