使文本元素始终 "two lines"

Make a text element always "two lines"

我有一个像这样的垂直堆栈

VStack
  Text(lineA)
    .lineLimit(2)

  Text(lineB)

  Text(lineC)
}

别问我为什么。我的老板们决定他们希望第一个 Text 总是两行,即使 lineA 变量没有字符使文本增长到两行。

有没有办法让第一个文本在两行时呈现,而在超过两行时仍然显示沉默?

我可以看到使用框架来做到这一点,一种自杀,将高度固定为点值,该值可能因设备而异。

有没有更不致命的解决方案?

这是可能的解决方案(使用 Xcode 12.4 / iOS 14.4 测试)

var body: some View {
    VStack {
        Text("X\nX").foregroundColor(.clear)
            .frame(maxWidth: .infinity)
            .overlay(
                Text("sdfasdfasdfasd asd f asdf asd f asdf asd fas df ")
//              Text("sdfasdfasdfasd asd f asdf asd f asdf asd fas df asdf asd fa sdf asdfasdfasd asdf as df asdfasdf asdf")
            , alignment: .top)

        Text("lineB")
        Text("lineC")
    }
}

根据 @Asperi 绝妙的想法,我测试了另一个更适合我的选项:

var body: some View {
    VStack {
        Text("asdfasfdasfasfasfafddafas\n")
            .lineLimit(2)
            .foregroundColor(.black)
            .frame(maxWidth: .infinity)

        Text("lineB")
        Text("lineC")
    }
}

这将使它成为 2 行,即使文本只够一行,如果文本超过两行,将添加沉默。