Skip to content

What Is New After WWDC26 (SwiftUI)

A SwiftUI guide for coding agents. Also covers prominent tab role, swipeactionscontainer, reordercontainer drag drop, crossfade navigation transition, asyncimage caching urlsession, toolbar visibility priority overflow.

The WWDC26 cycle removes long-standing container limitations: swipe actions and reordering outside List, a prominent tab role, a cross-fade navigation transition, AsyncImage caching, and finer toolbar visibility control.

Swipe actions anywhere

swipeActions now works in ScrollView, lazy stacks, and custom layouts. Mark the scrolling container with the new swipeActionsContainer modifier; without it the row-level modifier does nothing outside List.

ScrollView {
  LazyVStack {
    ForEach(items) { item in
      ItemRow(item)
        .swipeActions {
          Button("Delete", role: .destructive) { delete(item) }
        }
    }
  }
}
.swipeActionsContainer()

Reordering anywhere

The same pattern covers drag reordering: reorderable() on the ForEach, reorderContainer on the container, which hands you a difference to apply to your array.

VStack {
  ForEach(landmarks) { LandmarkView($0) }
    .reorderable()
}
.reorderContainer(for: Landmark.self) { difference in
  difference.apply(to: &landmarks)
}

Prominent tabs and cross-fade transitions

role: .prominent on a Tab separates it at the trailing edge, the way .search already did. Navigation transitions stay preset-only, but the set grows to automatic, zoom, and cross-fade via navigationTransition(.crossFade).

AsyncImage finally caches

AsyncImage gains caching, controllable through a custom URLSession.

let cache = URLCache(memoryCapacity: 20 * 1024 * 1024,
                     diskCapacity: 100 * 1024 * 1024,
                     directory: nil)
let configuration = URLSessionConfiguration.default
configuration.urlCache = cache

AsyncImage(request: URLRequest(url: imageURL))
  .asyncImageURLSession(URLSession(configuration: configuration))

Toolbar visibility control

visibilityPriority says which items survive on small screens, ToolbarOverflowMenu collects secondary actions, and the topBarPinnedTrailing placement pins an item to the trailing edge.

.toolbar {
  ToolbarItem(placement: .topBarPinnedTrailing) { SecondaryControl() }
  ToolbarItem { PrimaryControl() }
    .visibilityPriority(.high)
  ToolbarOverflowMenu {
    Button("Action 1") { }
    Button("Action 2") { }
  }
}

Document-based apps also got a refresh and a performance boost, and Xcode ships SwiftUI Specialist skills for its agentic coding tools.

Use this guidance in your coding agent

Install the Better Design MCP once. Your agent then loads this page with one call.

get-swiftui-guide({ topic: "swiftui-what-is-new-after-wwdc26" })
claude mcp add --scope user better-design --transport http https://better-design.com/api/mcp --header "Authorization: Bearer <YOUR_API_KEY>"
Browse related design systems