SWIFTUI: навигация в поле зрения и go назад - PullRequest
0 голосов
/ 05 апреля 2020

У меня вопрос о Свифте. Как я могу перемещаться по представлениям?

Теперь у меня есть ContentView, который отображает launchScreen, или Login, или HomeView в условном (если).

    var body: some View {

    VStack {

        if (sessionStore.session != nil) {

            UserProfileView(userProfile: self.profile ??  UserProfile(uid: "", firstName: "", lastName: "", birth: "", email: "", phone: ""))

        } else if show || UserDefaults.standard.bool(forKey: initialLaunchKey){

            AuthentificationView().transition(.move(edge: .bottom))

        } else {

            PageViewContainer( viewControllers: Page.getAll.map({  UIHostingController(rootView: PageView(page: $0) ) }), presentSignupView: { withAnimation { self.show = true }; UserDefaults.standard.set(true, forKey: self.initialLaunchKey) }).transition(.scale)
        }
    }
    .frame(maxWidth: .infinity, maxHeight: .infinity)
    .background(Color.backgroundColor)
    .onTapGesture { UIApplication.shared.endEditing() }
}

Но если я нахожусь в LoginView, даже если мое условие в contentView for HomeView станет истинным, я не собираюсь в HomeView ...

Я перехожу к виду с помощью переменной в наблюдаемом объекте (page = 1, затем page = 2 .. .) Я думаю, что не лучший способ ...

struct AuthentificationView: View {

    @EnvironmentObject var userSignup: UserSignup


    var body: some View {

        VStack {

            if (userSignup.page >= 1) {

                SignupView()
                    .transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)))

            } else {

                LoginView()
                    .transition(.asymmetric(insertion: .move(edge: .leading), removal: .move(edge: .trailing)))

            }
        }
    }
}

Спасибо

1 Ответ

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

Я не могу проверить ваш код (из-за отсутствия пользовательских вещей), поэтому просто по опыту попробуйте следующее

  • использовать явное условие для каждого представления с переходом
  • сделать переходы анимируемыми
  • сделать переходы с удерживанием контейнера анимируемыми

Как показано ниже (поцарапано)

var body: some View {

    VStack {

        if userSignup.page >= 1 {

            SignupView()
                .transition(AnyTransition.asymmetric(insertion: .move(edge: .trailing), 
                removal: .move(edge: .leading)).animation(.default))

        } 
        if userSignup.page == 0 {

            LoginView()
                .transition(AnyTransition.asymmetric(insertion: .move(edge: .leading), 
                removal: .move(edge: .trailing)).animation(.default))

        }
    }.animation(.default)
}
...