Минимально воспроизводимый пример
Код: Выделить всё
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)
}
}
}
- Запустите приложение
- Нажмите «Показать лист» → появится лист уровня 1.
- Снова нажмите «Показать лист» → появится лист уровня 2.
- Сверните приложение (главный экран или переключатель приложений)
- Вернуться в приложение
Что я обнаружил
Для этой проблемы требуется определенная комбинация TabView + NavigationStack + .navigationDestination. Любое из следующих изменений предотвращает проблему:
- Удаление .navigationDestination(for:) из NavigationStack
- Удаление оболочки TabView
- Перемещение .navigationDestination before .sheet в цепочке модификаторов RootScreenView
Среда
iOS 26.4
Xcode 26.2 и 26.4
Воспроизводится как на симуляторе, так и на физическом устройстве
Кто-нибудь еще сталкивался с этим или нашел более надежный обходной путь?
Подробнее здесь: https://stackoverflow.com/questions/798 ... gationstac
Мобильная версия