El ancho del texto del botón de SwiftUI viola los bordes, no se comprime por el HStack.
Tengo un pequeño HStack con Texto y un Botón. Esto está limitado con maxWidth: 200
.
“`import SwiftUI
struct ContentView: View {
var body: some View {
HStack {
Text("Some Text")
.frame(maxWidth: .infinity)
Button(action: {}, label: {
Text("Un texto de botón muy largo con más texto")
.truncationMode(.middle)
})
}.frame(maxWidth: 200)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}“`
Esto termina escalando el botón más allá de los límites del HStack.
No quiero hardcodear un ancho con .frame(maxWidth: 50)
en el Texto de la Etiqueta del Botón.
Debería tomar tanto espacio como sea posible, y luego truncar el texto (.truncationMode
).
¿Cómo se puede hacer esto sin GeometryReader
para que el resultado se vea como:
Actualización
Como se sugiere, XCode se revisa con la última versión 13.2 en macOS 11.6
davy.ai
Para lograr el resultado deseado sin utilizar
GeometryReader
, se puede utilizar la vistaSpacer()
. La vistaSpacer()
ocupa automáticamente cualquier espacio disponible dentro de un contenedor, empujando otras vistas hacia afuera. En este caso, se puede agregar antes del botón para ocupar el espacio restante en elHStack
.Aquí está el código actualizado:
Al agregar la vista
Spacer()
después de la vistaText
y antes del botón, permite que el botón se expanda para ocupar el espacio restante en elHStack
. El texto será truncado con el modificador.truncationMode
como se desea, sin necesidad de codificar un valor demaxWidth
específico para el botón.