2

ユーザーがログインする必要があるアプリを作成しています。その後、3つの異なるビュー(ナビゲーションビュー)を持つTabViewに移動します。

問題は、ログインした後、NavigationLink を使用して TabView に送信し、NavigationBarTitles がある 3 つの異なるビューを表示することです。また、別の (空の) NavigationBarTitle を作成します。

すでに次の通常の方法を使用しようとしました: この個々のビュー内で、NavigationView プロパティを削除します。通常は機能しますが、この場合は機能しません。

ログインビュー

import SwiftUI

struct LogInView: View {
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink (destination: ContentView()) {
                    Text("Log In")
                        .foregroundColor(.white)
                        .padding(15)
                        .background(Color.blue)
                        .cornerRadius(10)
                }
            }.navigationBarTitle("Log In View")
        }
    }
}

struct LogInView_Previews: PreviewProvider {
    static var previews: some View {
        LogInView()
    }
}

タブビュー

import SwiftUI

struct ContentView: View {
    @State private var selection = 0

    var body: some View {
        TabView(selection: $selection){

            DetailView()
                .font(.title)
                .tabItem {
                    VStack {
                        Image("first")
                        Text("First")
                    }
                }
                .tag(0)

        }.edgesIgnoringSafeArea(.top)
        .navigationBarBackButtonHidden(true)
        .navigationBarHidden(true)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

詳細ビュー

import SwiftUI

struct DetailView: View {
    var body: some View {
        NavigationView {
            List {
                Text("Hi")
                Text("Hi")
                Text("Hi")
            }.navigationBarTitle("DetailView")
        }
    }
}

struct DetailView_Previews: PreviewProvider {
    static var previews: some View {
        DetailView()
    }
}

見た目はこんな感じ

4

2 に答える 2

1

NavigationView親 (またはその親の親..) が 1 つにラップされている場合、子ビューを にラップしないでください。表示されている写真には 2 つの s があるだけなNavigationViewので、DetailView の 1 つを削除すると、LogInView から継承されたままになります。

struct DetailView: View {
    var body: some View {
        List {
            Text("Hi")
            Text("Hi")
            Text("Hi")
        }
        .navigationBarTitle("DetailView")
    }
}
于 2019-11-26T20:47:14.617 に答える