Eu quero produzir algum texto em todos os 4 lados da exibição. Este é o meu código:
var body: some View {
Spacer()
Text("AA BB CC DD EE FF GG HH")
Spacer()
HStack {
Text("AA BB CC DD EE FF GG HH").rotationEffect(Angle(degrees: -90))
Spacer()
Text("AA BB CC DD EE FF GG HH").rotationEffect(Angle(degrees: 90))
}.frame(height: 200)
Spacer()
Text("AA BB CC DD EE FF GG HH")
Spacer()
}
}
Questões:
- Por que o texto é quebrado à esquerda, mas o mesmo texto não? E como posso evitar embrulhar?
- Por que o texto deixou uma margem diferente da direita do texto? E como posso torná-los iguais?
Acredito que parte do problema é que você não está forçando os dois a serem centralizados, também um é desenhado, em sua prioridade de layout antes do outro. Portanto, se você definir as larguras dos quadros, ao máximo, cada um ocupará 1/2 da visualização. Observe que o rotationEffect na verdade não ajusta a
frame
rotação.Fazer com que seus quadros correspondam constantemente é a única maneira "verdadeira" de resolver esse problema ou de usar outros truques de formatação, como
.minimumFontScale(..)
ou mesmo.lineLimit(..)
.Exemplo
Neste exemplo, posso obter uma saída esperada para vários tipos dinâmicos como esse.
A resposta de xTwisteDx é ótima (+1, aceito). Eu modifiquei um pouco para evitar quebra de texto dos textos girados.
Eles foram agrupados, porque a rotação do texto ocorre depois que o texto é disposto. Isso pode ser visto quando os modificadores de rotação são comentados. Então, ambos os textos simplesmente não cabem em uma linha.
Para obter textos girados desembrulhados, coloco-os em um
ZStack
, um texto ajustado à esquerda e outro à direita, usandoSpacers
. Dessa forma, ambos os textos não girados podem usar toda a largura da tela e não são quebrados.Após a rotação, tudo parece certo.
Aqui está o código: