Estou curioso, alguém já passou por isso antes? Tenho uma situação em que um texto longo que está dentro de uma visualização com largura limitada está sendo truncado desnecessariamente para que se encaixe verticalmente dentro do pai. Existe uma maneira de desativar esse truncamento?
Aqui está um código para demonstrar o problema:
struct TextTruncator: View {
@State private var longText = false
var body: some View {
Toggle("Long Text", isOn: $longText).padding()
essay
}
var essay: some View {
VStack {
paragraph
if longText {
paragraph
paragraph
paragraph
}
}
.frame(maxWidth: 200)
}
var paragraph: some View {
Text("+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")
}
}
Como podemos desabilitar o truncamento que acontece quando usamos Long Text? Claro, alguém naturalmente pensaria em colocar o Text dentro de um ScrollView, assim:
var body: some View {
Toggle("Long Text", isOn: $longText).padding()
ScrollView {
essay
}
}
Mas isso não atende às minhas necessidades, porque no meu contexto real, meu equivalente de Texto é seguido por alguns outros controles que eu quero que sigam imediatamente o Texto. Se eu usar o ScrollView como acima, o scrollView se expandirá para preencher a tela, mesmo que o Texto seja curto, e meus controles ficarão muito longe do Texto.
Então, tentei resolver isso usando um ViewThatFits para que o SwiftUI troque automaticamente do Text vanilla para uma versão que esteja incorporada em um ScrollView. Então, terminamos com algo assim:
var body: some View {
Toggle("Long Text", isOn: $longText).padding()
ViewThatFits {
essay
ScrollView {
essay
}
}
Button("My Controls") {}
Spacer()
}
E é aqui que o truncamento realmente se torna um problema. Ele está impedindo que a seção Text seja grande o suficiente para acionar o ViewThatFits para alternar para a versão ScrollView, como eu gostaria.
Ah, e a propósito, isso .frame(maxWidth:)
é necessário porque, caso contrário, até mesmo um único Texto será tão largo que sempre acionará a troca para a versão ScrollView.
Então, idealmente, espero que haja uma maneira de evitar o truncamento do texto, mas se alguém puder sugerir outra maneira de obter o layout que preciso, seria fabuloso!
Você só quer
ViewThatFits
trabalhar no eixo vertical, então você deve passarin: .vertical
como argumento:Agora você nem precisa mais de
maxWidth: 200
.