ios 如何在SwiftUI中为文本中的子字符串加下划线?

np8igboo  于 2022-11-26  发布在  iOS
关注(0)|答案(3)|浏览(254)

在Swift UI的Text视图中,是否有一种方法在线为特定子字符串加下划线?

// Code bellow will underline the ENTIRE string 😢
// Any way to underline on a specific substring?
Text("You must be invited by an....")
    .underline()

下面是我尝试构建的具体UI:

kq4fsx7k

kq4fsx7k1#

Text(..)视图有一个+操作符来组合文本。我还没有看过这个魔术是如何工作的,但是它确实做得很好。

Text("Regular text... ")
     + Text("underlined text!")
         .underline()

还有第二种方法,也可以在字符串上使用underlined()函数:

Text("Regular text... " + "undelined text!".underlined())

超级酷!

r1zhe5dt

r1zhe5dt2#

对我有效的是对其他文本对象使用字符串插值。
例如:
Text("This sentence is not underlined. \(Text("But this sentence is underlined.").underline())")
使用这种策略,我能够在原始Text对象中插入三个不同的带下划线的Text对象,而编译器不会抱怨。
希望这对你有帮助!

d5vmydt9

d5vmydt93#

有几种方法可以实现它。

func getAttributedString(string: String) -> AttributedString {
        var attributedString = AttributedString(string)
        attributedString.font = .body.bold()
        attributedString.underlineStyle = .single
        return attributedString
}

在这里,在函数中我也添加了粗体沿着下划线,你可以添加更多的样式。这可以留在ViewModel类中,并从View中调用,如下所示:

Text("You must be invited by an...." + model. getAttributedString(string: "apply to be on the waitlist"))

或者有另一种方法,你可以在ViewModel中创建另一个函数,它可以像上面所示的那样做。

Text(model.getString())  // put this in View

func getString() -> AttributedString {
    return "You must be invited by an...." + getAttributedString(string: "apply to be on the waitlist")
}

相关问题