【问题标题】:SwiftUI - Two navigation barsSwiftUI - 两个导航栏
【发布时间】:2021-03-01 15:06:57
【问题描述】:

我有一个问题,在我注册一个新用户后,应用程序返回到主菜单(使用 NavigationLink),然后如果我选择菜单中的一个选项,在下一个视图中我有 2 个导航栏.

我正在 MainView 中使用 NavigationView。

struct ContentView: View {
var body: some View {
    NavigationView {
        MainView()
    }
}

}

struct MainView: View {
var body: some View {
        VStack {
            NavigationLink(
                destination: AuthView(),
                label: {
                    Text("Sesion")
                })
            
        }
        
}

}

struct AuthView: View {

@State private var email: String = ""
@State private var password: String = ""

let lightGreyColor = Color(red: 239.0/255.0, green: 243.0/255.0, blue: 244.0/255.0, opacity: 1.0)

var body: some View {
        VStack() {
          
                NavigationLink(
                    destination: RegisterView(),
                    label: {
                        Text("Registrarse")
                            .font(.headline)
                            .foregroundColor(.white)
                            .padding()
                            .frame(width: 200, height: 60)
                            .background(Color.green)
                            .cornerRadius(15.0)
                    })
            }
        }
        .padding()
        .navigationBarTitle("Autenticacion")
        .navigationBarTitleDisplayMode(.inline)
    

}

struct RegisterView: View {
@ObservedObject var registerController = RegisterController()

@State private var showingRegistrationAlert = false

@State var navigateNext = false

let lightGreyColor = Color(red: 239.0/255.0, green: 243.0/255.0, blue: 244.0/255.0, opacity: 1.0)

var body: some View {
        VStack {
            VStack(alignment: .leading) {
                
            Spacer()
            
            NavigationLink(destination:  ContentView(), isActive:$navigateNext) {
                                Text("")
            }
                Button(action: { if registerController.validateRegistration() {
                    showingRegistrationAlert.toggle()
                }}) {
                    Text("Enviar registro")
                }
                .alert(isPresented: $showingRegistrationAlert) {
                    Alert(title: Text("Se registro correctamente"), dismissButton: .default(Text("Ok"), action: {
                        navigateNext.toggle()
                    }))
                
            }
        .padding()
        .navigationBarTitle(Text("Registracion"), displayMode: .inline)
    
}

}

我尽量减少代码,如果太多了,抱歉。

【问题讨论】:

  • 这是很常见的问题,1000 次回答!你搜索过旧问题吗?
  • 是的,但是我解决不了,你。

标签: swift swiftui


【解决方案1】:

您正在 RegisterView 中添加第二个 NavigationView。这就是问题所在!因为使用了ContentView,为了解决使用MainView()。

 struct RegisterView: View {
@ObservedObject var registerController = RegisterController()

@State private var showingRegistrationAlert = false

@State var navigateNext = false

let lightGreyColor = Color(red: 239.0/255.0, green: 243.0/255.0, blue: 244.0/255.0, opacity: 1.0)

var body: some View {
        VStack {
            VStack(alignment: .leading) {
                
            Spacer()
            
            NavigationLink(destination: MainView(), isActive:$navigateNext) {             // <<: here
                                Text("")
            }
                Button(action: { if registerController.validateRegistration() {
                    showingRegistrationAlert.toggle()
                }}) {
                    Text("Enviar registro")
                }
                .alert(isPresented: $showingRegistrationAlert) {
                    Alert(title: Text("Se registro correctamente"), dismissButton: .default(Text("Ok"), action: {
                        navigateNext.toggle()
                    }))
                
            }
        .padding()
        .navigationBarTitle(Text("Registracion"), displayMode: .inline)
    
}
}

【讨论】:

    【解决方案2】:

    您只想让 NavigationView 位于层次结构中的 TOP 视图上 - 不要在任何子视图上使用它,即使由 NavigationLink 呈现。

    编辑:如果您已经这样做了,请发布代码示例,我可以查看更多详细信息。

    我喜欢的另一个选择是将 SwiftUI 视图包装在 UIHostingController 中并使用 UIKit 进行导航 - 因为 NavigationLinks 自发布以来一直存在错误。

    【讨论】:

    • 是的,我已经这样做了,现在我要发布示例,你。
    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多