wandres.dev
SWIFTUI AVANZADO · @Observable y animaciones

Novedades de SwiftUI en iOS 26

Lo nuevo de 2026: toolbars con prioridad y overflow, contenedores reordenables con una línea, la API de documentos y el caché automático de AsyncImage.

⏱ 12 min

SwiftUI evoluciona cada año, y iOS 26 trae mejoras que resuelven fricciones reales: barras de herramientas que se adaptan al espacio, listas reordenables sin código de arrastre, y AsyncImage que por fin cachea. Conocerlas te mantiene al día.

🎯 Al terminar esta lección sabrás
  • Toolbars adaptativas: prioridad, overflow y pinneado.
  • Contenedores reordenables con una línea.
  • La API de documentos (Writable/ReadableDocument).
  • Caché automático de AsyncImage.

Toolbars que se adaptan

Antes, cuando la pantalla se estrechaba, los botones de la toolbar se apretujaban o desaparecían sin control. iOS 26 da control fino:

.toolbar {
    ToolbarItemGroup {
        Button("Compartir", systemImage: "square.and.arrow.up") { }
            .toolbarOverflowMenu()          // va al menú "…" si no cabe
    }
}
.toolbar {
    Button("Guardar", systemImage: "checkmark") { }
        .visibilityPriority(.high)          // se mantiene visible más tiempo
}
⚖️

visibilityPriority

Decide qué botones sobreviven cuando falta espacio. Los importantes, prioridad alta.

toolbarOverflowMenu

Manda los botones de baja prioridad a un menú de overflow en lugar de ocultarlos.

📌

topBarPinnedTrailing

Fija una acción crítica (como compartir) al borde, siempre visible.

Contenedores reordenables

Una de las mejores novedades: reordenar arrastrando ya no es exclusivo de List ni requiere código especial. La misma API funciona en List, LazyVGrid y más:

@State private var items = ["Uno", "Dos", "Tres"]

List {
    ForEach(items, id: \.self) { Text($0) }
        .onMove { origen, destino in
            items.move(fromOffsets: origen, toOffset: destino)
        }
}

Y ahora la reordenación llega incluso a contenedores como grids con el mismo código — antes impensable sin implementarlo a mano.

La API de documentos

Para apps basadas en documentos (editores, notas), la nueva API da control directo sobre cómo se leen y escriben en disco, de forma asíncrona e incremental con reporte de progreso:

struct MiDoc: WritableDocument, ReadableDocument {
    var texto: String
    // lectura/escritura asíncrona con Subprogress para mostrar progreso
}

Conforma a WritableDocument y ReadableDocument y obtienes operaciones de disco no bloqueantes, ideales para archivos grandes.

AsyncImage con caché

AsyncImage carga imágenes de una URL, pero hasta ahora las recargaba al hacer scroll. En iOS 26 cachea automáticamente vía HTTP:

AsyncImage(url: URL(string: "https://ejemplo.com/foto.jpg")) { imagen in
    imagen.resizable().scaledToFill()
} placeholder: {
    ProgressView()
}

Ahora, al desplazar una lista de imágenes arriba y abajo, no se vuelven a descargar: el caché HTTP las conserva. Menos datos, scroll más fluido, sin librerías externas.

Mantente al día, pero sin correr detrás de cada novedad

Cada versión de iOS trae APIs nuevas, y es tentador reescribir todo para usarlas. La postura sensata: conoce lo nuevo (para no reinventar lo que ya resuelve el sistema) pero adopta según tu público. Si soportas iOS 25, no puedes usar aún lo de iOS 26 sin un fallback. Las novedades de esta lección son sólidas y las usarás en proyectos nuevos; en apps con base de usuarios amplia, comprueba siempre tu versión mínima antes. Saber qué existe es la mitad del trabajo; saber cuándo usarlo es la otra mitad.

⚔️ Prueba lo nuevo
  1. Añade una toolbar con un botón de prioridad alta y otro que vaya al overflow.
  2. Haz una List reordenable con .onMove.
  3. Carga una imagen remota con AsyncImage y un placeholder de ProgressView.
  4. Repasa las notas de “What’s new in SwiftUI” de la WWDC del año para ver qué más hay.