在NavigationLink之后,在NavigationView内部,TabView内部显示NavigationBar。 SwiftUI

时间:2019-11-26 16:30:23

标签: swiftui navigationbar navigationview tabview navigationlink

我正在制作一个用户需要登录的应用程序,然后带我进入一个TabView,其中有3个不同的视图(导航视图)。

问题出在我登录后,并使用NavigationLink将我发送到TabView,向我显示3个不同的视图,其中有NavigationBarTitles。它还在我的上方创建另一个(空)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()
    }
}

TABVIEW

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()
    }
}

This is how it looks

2 个答案:

答案 0 :(得分:0)

您可以优化ContentView中的所有内容,而不是detailView。尽管推理在您当前的工作中还算不错,但演示文稿背后的逻辑可能会涉及一些调整。

 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).navigationBarTitle("DetailView", displayMode: .inline).navigationBarHidden(true)

}
}


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

}
}

答案 1 :(得分:0)

如果子视图的父级(或其父级的父级..)包装在一个子视图中,则不应将其包装在var link = document.getElementsByTagName("a"); for (var i = 0; i < link.length; i++) { arr_link = (link[i].href).split("#"); var fragment = ""; if (arr_link[1]) { fragment = "#" + arr_link[1]; } var my_new_url = arr_link[0].replace(/(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?utm[^&]*(?:&utm[^&]*)*$|&utm[^&]*/gi, '$1'); link[i].href = my_new_url + fragment; } 中。您仅在显示的照片上有两个NavigationView,所以在DetailView中删除其中一个,它将仍然继承自LogInView:

NavigationView