2

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

VStack
  Text(lineA)
    .lineLimit(2)

  Text(lineB)

  Text(lineC)
}

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

有没有办法让第一个 Text 呈现如果它是两行并且如果有超过 2 行仍然显示静默?

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

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

4

2 回答 2

1

这是可能的解决方案(使用 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")
    }
}

在此处输入图像描述

在此处输入图像描述

于 2021-04-26T16:02:43.063 回答
1

遵循@Asperi绝妙的主意,我测试了另一个对我来说效果更好的选项:

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

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

这将使它变成 2 行,即使文本只够 1 行,如果文本超过 2 行,将添加 retences。

于 2021-04-26T16:50:19.467 回答