SwiftUI: разрешить навигационную панель появляться ТОЛЬКО на главной / первой странице - PullRequest
0 голосов
/ 15 января 2020

Я написал просто отформатированный код, показывающий, что если на первой / главной странице разрешено показывать панель навигации, то с помощью .navigationBarTitle(...) у подпредставления (ей) этой страницы будет панель навигации.

Главный вид:

struct ContentView: View {
    var body: some View {
        NavigationView{
            VStack{
                NavigationLink(destination: View01()){
                    Text("To view 1")
                }
            }
            .navigationBarTitle("Front Page", displayMode: .inline) //removable, but needed for the first page's bar
        }
    }
}

Дочерний вид основного вида:

struct View01: View {
    var body: some View {
        VStack{
            EmptyView()
        }
        .navigationBarBackButtonHidden(true) //the back button is gone 
        .navigationBarHidden(true) //this has no effect here
    }
}

Когда я удаляю .navigationBarTitle(...) из основного кода, панель навигации исчезает из всех представлений. Однако, если я верну его и использую .navigationBarHidden(true) в коде дочернего представления, панель навигации останется здесь.

Я ищу любое решение, которое позволяет мне отображать панель навигации ТОЛЬКО на первом / front / main page, тогда как другие страницы / дочерние страницы не имеют панели навигации.

1 Ответ

1 голос
/ 15 января 2020

Если вы хотите использовать pu sh и pop , попробуйте следующий способ:

struct ParentView: View {
    @State var navigationBarIsHidden: Bool = false
    @State private var showDetail = false
    var body: some View {
        NavigationView {
            ZStack {
                Color.red
                NavigationLink("show child view", destination: ChildView(navigationBarIsHidden: $navigationBarIsHidden, showSelf: $showDetail), isActive: $showDetail)
            }
            .navigationBarTitle("title", displayMode: .inline)
            .navigationBarHidden(navigationBarIsHidden)
            .onAppear {
                self.navigationBarIsHidden = false
            }
        }
    }
}

ChildView.swift

struct ChildView: View {
    @Binding var navigationBarIsHidden: Bool
    @Binding var showSelf: Bool
    var body: some View {
        ZStack {
            Color.green
            Text("ChildView").onTapGesture {
                self.navigationBarIsHidden = false
                self.showSelf = false
            }
        }
        .onAppear {
            self.navigationBarIsHidden = true
        }
    }
}
...