使文本元素始终为“两行”

问题描述

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

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")
    }
}

enter image description here

enter image description here

,

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

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

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

即使文字只够1行,也会变成2行,如果文字超过两行,会加上停顿。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...