问题描述
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")
}
}
即使文字只够1行,也会变成2行,如果文字超过两行,会加上停顿。