Почему NavigationLink не является навигацией с SwiftUI - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь использовать 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)
    }
}

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Вы должны обернуть вид внутри 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)
    }
}

}

0 голосов
/ 05 февраля 2020

Для лучшего понимания навигации, пожалуйста, взгляните на код ниже

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

- Хорошо работает на устройстве, в симуляторе эта ошибка не работает во второй раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...