ContentUnavailableView para crear un Empty State con SwiftUI

Marcelo Laprea
13 junio, 20232min de lectura
En la WWDC 2023 Apple introdujo una nueva vista en SwiftUI llamada ContentUnavailableView a partir de iOS 17, la cual nos permite crear estados vacíos. Veamos un ejemplo de como crear la vista:
ContentUnavailableView {Label("Título", systemImage: "imagen")} description: {Text("Descripción")} actions: {Button {print("Acción")} label: {Text("Crear comida")}}
- Definimos un
Labelcon un título y una imagen. - Añadimos una descripción, siendo este opcional.
- Añadimos la acción que queremos ejecutar, en este caso un botón, siendo también opcional.
Añadiendo ContentUnavailableView en nuestra vista
Imagina que obtenemos un listado de comidas del servidor, y este llega vacío por algún error en la llamada o porque realmente no tenemos comidas agregadas en nuestra lista. Creamos nuestro listado de comidas, y añadimos la vista ContentUnavailableView dentro de un modificador overlay, con la condición de que la vista sea mostrada en caso de que nuestra variable foods esté vacía.
Luego le añadimos al ContentUnavailableView un Label con un título y la imagen que queremos representar, seguido de una descripción para indicarle al usuario que está pasando.
import SwiftUIstruct ContentView: View {var foods: [String] = []var body: some View {List {ForEach(foods, id: \.self) { food inText(food)}}.overlay {if foods.isEmpty {ContentUnavailableView {Label("Sin comidas", systemImage: "carrot.fill")} description: {Text("Empieza a crear comidas para verlas en tu lista")}}}}}
Veamos como queda la vista:
Diferentes formas de crear un ContentUnavailableView
- Añadiendo un
Label, descripción y acción tal como vimos en la primera sección del artículo. - Con la opción que nos da Apple para crear un estado vacío para una búsqueda fallida.
ContentUnavailableView.search.
- La misma opción anterior, pero añadiendo el término de búsqueda no encontrado
ContentUnavailableView.search(text: "AsyncLearn").
Gracias a esta nueva vista que nos proporciona Apple podemos crear estados vacíos o "empty states" de una manera sencilla y rápida, mejorando la experiencia de los usuarios en nuestra app.