SwiftUI: componente Spacer

Qué es Spacer

El componente Spacer permite añadir una vista flexible sin representación visual entre los contenidos. Este componente se añade en la dirección del contenedor, comportándose de forma diferente dependiendo de si el contenedor es un VStack (ocupará todo el espacio vertical restante) o un HStack (ocupará todo el espacio horizontal restante). No tiene ninguna equivalencia con ningún componente de UIKit.

Aquí podéis consultar la documentación oficial

Su inicialización se realiza de la siguiente forma:

Spacer()

Para poder entenderlo vamos a usar el componente VStack como ejemplo. En este caso, cuando añadimos contenido al componente, este contenido se centra en la vista padre.

struct ContentView: View {
    var body: some View {
        VStack {
            Image("sdos_office")
                .resizable()
                .scaledToFit()
                .frame(height: 200)
            Text("La firma tecnológica sevillana SDOS instalará su nueva factoría de software en El Puerto")
                .font(.title2)
                .padding([.leading, .trailing], 10)
            Text("La consultora tecnológica SDOS ha anunciado que abrirá en El Puerto, en el polígono Las Salinas, una factoría de software. Y espera que esté operativa en el segundo semestre del año. Se trataría de un centro tecnológico...")
                .font(.subheadline)
                .padding([.leading, .trailing, .top], 10)
        }
    }
}

Si necesitáramos mostrar el contenido alineado con la parte superior de la vista, podríamos añadir un Spacer al final de todo el contenido. Este Spacer se encargará de ocupar todo el espacio en blanco restante de la pantalla, “empujando” todo el contenido hacia arriba.

struct ContentView: View {
    var body: some View {
        VStack {
            Image("sdos_office")
                .resizable()
                .scaledToFit()
                .frame(height: 200)
            Text("La firma tecnológica sevillana SDOS instalará su nueva factoría de software en El Puerto")
                .font(.title2)
                .padding([.leading, .trailing], 10)
            Text("La consultora tecnológica SDOS ha anunciado que abrirá en El Puerto, en el polígono Las Salinas, una factoría de software. Y espera que esté operativa en el segundo semestre del año. Se trataría de un centro tecnológico...")
                .font(.subheadline)
                .padding([.leading, .trailing, .top], 10)
            Spacer()
        }
    }
}

También podemos usarlo para añadir espacio extra entre los diferentes elementos visuales de nuestra vista:

struct ContentView: View {
    var body: some View {
        VStack {
            Image("sdos_office")
                .resizable()
                .scaledToFit()
                .frame(height: 200)
            Spacer()
                .frame(height: 50)
            Text("La firma tecnológica sevillana SDOS instalará su nueva factoría de software en El Puerto")
                .font(.title2)
                .padding([.leading, .trailing], 10)
            Text("La consultora tecnológica SDOS ha anunciado que abrirá en El Puerto, en el polígono Las Salinas, una factoría de software. Y espera que esté operativa en el segundo semestre del año. Se trataría de un centro tecnológico...")
                .font(.subheadline)
                .padding([.leading, .trailing, .top], 10)
            Spacer()
        }
    }
}

También podemos añadir varios Spacer para hacer una división proporcional de la pantalla. Por ejemplo, podemos añadir un nuevo Text al ejemplo anterior para que se posicione en la mitad del espacio en blanco que nos queda debajo del todo.

struct ContentView: View {
    var body: some View {
        VStack {
            Image("sdos_office")
                .resizable()
                .scaledToFit()
                .frame(height: 200)
            Spacer()
                .frame(height: 50)
            Text("La firma tecnológica sevillana SDOS instalará su nueva factoría de software en El Puerto")
                .font(.title2)
                .padding([.leading, .trailing], 10)
            Text("La consultora tecnológica SDOS ha anunciado que abrirá en El Puerto, en el polígono Las Salinas, una factoría de software. Y espera que esté operativa en el segundo semestre del año. Se trataría de un centro tecnológico...")
                .font(.subheadline)
                .padding([.leading, .trailing, .top], 10)
            Spacer()
            Text("Footer")
            Spacer()
        }
    }
}

Modificadores comunes para Spacer

El componente Spacer comparte los mismos métodos de personalización que el componente View y pueden ser consultados en el siguiente enlace.

Ejemplo

Puedes encontrar este ejemplo en https://github.com/SDOSLabs/SwiftUI-Test bajo el apartado Spacer.

Rafael Fernández,
iOS Tech Lider