Tenho o HStack com duas visualizações: Imagem e Texto. Gostaria de alinhar a Imagem no topo, mas o texto no centro do VerticalAlignment. No entanto, especificar o alinhamento .center para o Texto não resolve, ele ainda está posicionado no topo. Há algo que eu esteja esquecendo?
struct SwiftUIView: View {
var body: some View {
HStack(alignment: .top) {
Image(systemName: "star.fill")
.resizable()
.frame(width: 100, height: 100)
.background(.green)
HStack(alignment: .center) {
Text("Text that has dynamic height and should be aligned center")
.background(.pink)
}
}
.background(.gray)
}
}
Se entendi corretamente, você quer que a imagem seja alinhada ao topo
HStack
quando o texto for mais alto que a imagem, e você quer que o texto seja centralizado verticalmente quando o texto for mais baixo que a imagem.Em vez de envolver o texto em outro
HStack
, você deve adicionar umframe
ao redor do texto.Este quadro (invisível) deve ter pelo menos a mesma altura da imagem (100pt), e o texto deve estar
.center
alinhado dentro desse quadro..center
é o valor padrão paraalignment:
, então escrever.frame(minHeight: 100)
é suficiente. Eu o incluí apenas para que fique claro o que está acontecendo.Quando o texto é menor que a imagem:
Quando o texto é mais alto que a imagem:
Se você sabe o tamanho da imagem, então uma maneira de alinhar o texto é aplicar um
.alignmentGuide
. O aninhadoHStack
não é necessário: