es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

url de la imagen

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:

url de la imagen

Actualización

Como se sugiere, XCode se revisa con la última versión 13.2 en macOS 11.6

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado sin utilizar GeometryReader, se puede utilizar la vista Spacer(). La vista Spacer() 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 el HStack.

    Aquí está el código actualizado:

    struct ContentView: View {
            var body: some View {
                HStack {
                    Text("Some Text")
                        .frame(maxWidth: .infinity)
                    Spacer()
                    Button(action: {}, label: {
                        Text("A Very much to long button Text with more Text")
                            .truncationMode(.middle)
                    })
                }.frame(maxWidth: 200)
            }
        }
    

    Al agregar la vista Spacer() después de la vista Text y antes del botón, permite que el botón se expanda para ocupar el espacio restante en el HStack. El texto será truncado con el modificador .truncationMode como se desea, sin necesidad de codificar un valor de maxWidth específico para el botón.

Comments are closed.