Skip to content

Instantly share code, notes, and snippets.

@ole
Created December 2, 2021 17:48
Show Gist options
  • Save ole/1f598848273f9caed304d4c200c6eb1e to your computer and use it in GitHub Desktop.
Save ole/1f598848273f9caed304d4c200c6eb1e to your computer and use it in GitHub Desktop.
Weird SwiftUI two-column NavigationView behavior
// 1. Run on iPad simulator in landscape (= two-column navigation view).
// 2. Drill down to level 3
// 3. Observe console output.
//
// Result with .navigationViewStyle(.stack) (as expected):
// Level 1: drilledDown=false
// Level 1: drilledDown=true
// Level 2: drilledDown=false
// Level 2: drilledDown=true
// Level 3: drilledDown=false
//
// Result with .navigationViewStyle(.columns):
// Level 1: drilledDown=false
// Level 1: drilledDown=true
// Level 2: drilledDown=false
// Level 2: drilledDown=true
// Level 3: drilledDown=false
// → Level 1: drilledDown=false
//
// Note the last line!
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
DetailView(level: 1)
}
.navigationViewStyle(.stack)
// .navigationViewStyle(.columns)
}
}
struct DetailView: View {
let level: Int
@State var drilledDown: Bool = false
var body: some View {
let _ = print("Level \(level): drilledDown=\(drilledDown)")
List {
NavigationLink(isActive: $drilledDown) {
DetailView(level: level + 1)
} label: {
HStack {
if drilledDown {
Image(systemName: "checkmark")
}
Text("Drill Down")
}
}
}
.navigationTitle("Level \(level)")
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment