Всегда делайте текстовый элемент «двумя строками»
У меня такой вертикальный стек
VStack
Text(lineA)
.lineLimit(2)
Text(lineB)
Text(lineC)
}
Не спрашивайте меня, почему. Мои начальники решили, что хотят первое
Text
всегда с двумя строками, даже если в переменной lineA нет символов, чтобы текст увеличился до двух строк.
Есть ли способ сделать первый текст для рендеринга, если он состоит из двух строк, и по-прежнему отображать скрытность, если имеется более двух строк?
Я вижу, как для этого используется рамка, своего рода самоубийство, когда высота фиксируется на значении в баллах, которое может варьироваться от устройства к устройству.
Есть ли менее смертоносное решение?
2 ответа
Вот возможное решение (протестировано с 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")
}
}
Следующий
var body: some View {
VStack {
Text("asdfasfdasfasfasfafddafas\n")
.lineLimit(2)
.foregroundColor(.black)
.frame(maxWidth: .infinity)
Text("lineB")
Text("lineC")
}
}
Это сделает его двумя строками, даже если текста достаточно только для одной, а если текст превышает две строки, будут добавлены скрытности.