使文本元素始终 "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 行,即使文本只够一行,如果文本超过两行,将添加沉默。
我有一个像这样的垂直堆栈
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 行,即使文本只够一行,如果文本超过两行,将添加沉默。