SwiftUI alinea un símbolo SF como texto junto a un texto
Necesito mostrar un símbolo SF (imagen) y un texto en una vista (como un título). Como el texto podría ser bastante largo, quiero que pase por debajo de la imagen en una segunda línea.
Resultado esperado (¡casi!):
Primero intenté usar un HStack con la imagen y el texto. Pero el texto no se coloca debajo de la imagen: la segunda línea comienza con un “relleno” a la izquierda (correspondiente al espacio izquierdo de la imagen).
Así que hice este código (para obtener la captura de pantalla anterior):
HStack(alignment:.top) {
Text(Image(systemName: "circle.hexagongrid.circle"))
.font(.caption)
.foregroundColor(.pink)
+
Text("Un texto largo como ejemplo")
.font(.title2).bold()
.foregroundColor(.pink)
}
.frame(width:140)
Pero quiero alinear la imagen con el centro de la primera línea. El centro de la imagen debería estar verticalmente en el medio de la parte superior de “A” y la parte inferior de “g”.
Es importante que mi segunda (y más) línea pase debajo de mi imagen. Y no quiero una fuente más grande para la imagen.
davy.ai
Para alinear la imagen con el centro de la primera línea y asegurarse de que la segunda línea pase debajo de la imagen, puedes usar una combinación de
ZStack
,Text
eImage
.Aquí tienes un código de ejemplo que logra el resultado deseado:
Explicación del código:
ZStack
conalignment
establecido en.topLeading
. Esto significa que los elementos se alinearán en la esquina superior izquierda delZStack
.Text
con el texto largo. Establecemos la fuente y el color según se desee.Image
con el símbolo SF. Establecemos la fuente y el color según se desee.alignmentGuide
en la imagen. Establecemos la dimensión en.topLeading
y calculamos el valor dividiendo la altura de la imagen por 2 y negándolo. Esto centra la imagen verticalmente sobre el texto.ancho
delZStack
en 140 para que coincida con la captura de pantalla original.Esto debería darte un resultado similar a la captura de pantalla esperada.