SwiftUI: Nested sheets dismissed on app background with TabView + NavigationStack + .navigationDestination (iOS 26)

2 weeks ago 16
ARTICLE AD BOX

I'm experiencing an issue on iOS 26.4 where nested .sheet presentations are automatically dismissed when the app goes to the background. I was able to reproduce similar case on iOS 26.2 but can't build a minimal reproducible project out of the real one.

Minimal reproducible example

struct ContentView: View { var body: some View { TabView { firstTabContent() .tabItem { Text("First tab") } } } private func firstTabContent() -> some View { NavigationStack { RootScreenView() .navigationDestination(for: String.self) { string in Text(string) } } } } struct RootScreenView: View { @State private var isSheetPresented: Bool = false var body: some View { VStack { Text("Root screen view") Button("Show sheet") { isSheetPresented = true } } .sheet(isPresented: $isSheetPresented) { StubScreenView(level: 1) } } } struct StubScreenView: View { let level: Int @State private var isSheetPresented: Bool = false var body: some View { VStack { Text("Level \(level)") Button("Show sheet") { isSheetPresented = true } } .sheet(isPresented: $isSheetPresented) { StubScreenView(level: level + 1) } } }

Steps to reproduce

Launch the app

Tap "Show sheet" → level 1 sheet appears

Tap "Show sheet" again → level 2 sheet appears

Minimize the app (home screen or app switcher)

Return to the app

After returning to the app all sheets except the first one are collapsed without any animation.

What I've found

The issue requires the specific combination of TabView + NavigationStack + .navigationDestination. Any of the following changes prevent the issue:

Removing .navigationDestination(for:) from the NavigationStack

Removing the TabView wrapper

Moving .navigationDestination before .sheet in the modifier chain on RootScreenView

This suggests the issue is related to how iOS 26.4 manages the UIKit presentation controller hierarchy during the background transition when these three elements interact. However, it's quite common case if app uses modern SwiftUI navigation.

Environment

iOS 26.4
Xcode 26.2 and 26.4
Reproducible on both Simulator and physical device

Has anyone else encountered this or found a more robust workaround?

Read Entire Article