SwiftUI in iPad: Remove Standard Navigation Backbutton

Viewed 55

I want to remove the standard Back-Button in a SwiftUI app and display an icon instead.
The code below works fine on iPhone.
On iPad the standard Back-Button plus my icon appear in the Nav-Bar.
How can I solve this?

struct Two_Column_V1: View {
#if os(iOS)
  @Environment(\.horizontalSizeClass) var horizontalSizeClass
#endif
  var colors: [Color] = [.red, .green, .blue, .yellow, .purple]
  
  var body: some View {
    NavigationView {
      ListView()
      DetailView()
    }
#if os(iOS)
    .navigationViewStyleStack(if: horizontalSizeClass == .compact)
#endif
  }
}

struct ListView : View{
  var colors: [Color] = [.red, .green, .blue, .yellow, .purple]
  var body: some View{
    List {
      ForEach(1...5, id: \.self) { val in
        NavigationLink(destination: DetailView(text: String(val), color: colors[val-1])) {
          Text("Link\(val)")
            .font(.largeTitle)
            .foregroundColor(colors[val-1])
            .padding()
        }
      }
    }
    .navigationTitle("List")
  }
}

struct DetailView: View {
  @Environment(\.dismiss) var dismiss
  
  var text = "SPLASH"
  var color: Color = .black
  
  var body: some View {
    VStack {
      Text("Detail")
        .font(.largeTitle)
        .padding()
      
      Text("Text: \(text)")
        .font(.title)
        .foregroundColor(color)
    }
    //.navigationTitle("Detail")
    .navigationBarBackButtonHidden(true)
    .navigationBarItems( leading:  Button(action: { dismiss()}) {Image(systemName: "arrow.left.circle")})
  }
}


extension NavigationView {
  @ViewBuilder
  func navigationViewStyleStack(if styleStack: Bool) -> some View {
    if styleStack {
#if os(iOS)
      self.navigationViewStyle(StackNavigationViewStyle())
#else
      self.navigationViewStyle(DefaultNavigationViewStyle())
#endif
    } else {
      //self.navigationViewStyle(DoubleColumnNavigationViewStyle())
      self.navigationViewStyle(DefaultNavigationViewStyle())
    }
  }
}

0 Answers
Related