簡體   English   中英

為什么 NavigationLink 不能使用 SwiftUI 導航

[英]Why is NavigationLink not navigation with SwiftUI

我正在嘗試使用 NavigationLink 導航到 LoginScreen。 然而,點擊按鈕並沒有做任何事情。 如果我調用 onTapGesture 方法,它就會被觸發。

struct SplashScreen: View {

    @State
    var shouldGoHome: Bool = false
    @State
    var goToDestination: Bool = false
    @ObservedObject private var viewModel = SplashViewModel()

    var body: some View {
        VStack {
            VColorBackground()
            Text("VOWER")
                .foregroundColor(Color(ColorTheme.brandBlue.value))
                .font(.system(size: 36))
                .tracking(20)
            Text("YOUR TIME DESRVES A\n LOUDER APPLAUSE")
                .tracking(2)
                .multilineTextAlignment(.center)
                .padding(EdgeInsets.init(top: 30, leading: 0, bottom: 0, trailing: 0))
                .font(.system(size: 14))
                .foregroundColor(Color.black)
            if (viewModel.isUserLoggedIn) {
                VowerNavigationButton(text: "Get Started", goToDestination: $goToDestination) {
                    AppView()
                }
                .padding(EdgeInsets.init(top: 70, leading: 0, bottom: 0, trailing: 0))
            } else {
                NavigationLink(destination: LoginScreen()) {
                    VowerButtonStyle(text: "Get Started")
                }
                .padding(EdgeInsets.init(top: 70, leading: 0, bottom: 0, trailing: 0))
            }


            Spacer()

        }
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
        .edgesIgnoringSafeArea(.all)
    }
}

您必須將視圖包裝在 NavigationView { } 中,否則 NavigationLink 將無法工作。

struct SplashScreen: View {

@State
var shouldGoHome: Bool = false
@State
var goToDestination: Bool = false
@ObservedObject private var viewModel = SplashViewModel()

var body: some View {
    NavigationView{ 
        VStack {
            VColorBackground()
            Text("VOWER")
                .foregroundColor(Color(ColorTheme.brandBlue.value))
                .font(.system(size: 36))
                .tracking(20)
            Text("YOUR TIME DESRVES A\n LOUDER APPLAUSE")
                .tracking(2)
                .multilineTextAlignment(.center)
                .padding(EdgeInsets.init(top: 30, leading: 0, bottom: 0, trailing: 0))
                .font(.system(size: 14))
                .foregroundColor(Color.black)
            if (viewModel.isUserLoggedIn) {
                VowerNavigationButton(text: "Get Started", goToDestination: $goToDestination) {
                    AppView()
                }
                .padding(EdgeInsets.init(top: 70, leading: 0, bottom: 0, trailing: 0))
            } else {
                NavigationLink(destination: LoginScreen()) {
                    VowerButtonStyle(text: "Get Started")
                }
                .padding(EdgeInsets.init(top: 70, leading: 0, bottom: 0, trailing: 0))
            }


            Spacer()

        }
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
        .edgesIgnoringSafeArea(.all)
    }
}

}

為了更好地理解導航,請看下面的代碼

var body: some View {
    NavigationView{
        VStack(){
            Text("VOWER")
            NavigationLink(destination: detailView){
                VStack(){
                    Text("Sunset").foregroundColor(Color.blue)
                }
            }.navigationBarTitle("Login") //define Title bar for better understanding and ease
        }
    }
}

同樣在目標視圖SwiftUI類中,可以定義navigationBarTitle

    var body: some View {
     VStack(){
        Text("Turn Notification On/Off")
     }.navigationBarTitle("Settings")
    }

- 它在設備上運行良好,模擬器有第二次無法運行的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM