SwiftUI (1.0) 中的导航问题
Posted
技术标签:
【中文标题】SwiftUI (1.0) 中的导航问题【英文标题】:problems with navigation in SwiftUI (1.0) 【发布时间】:2020-08-14 03:43:10 【问题描述】:首先我有 NavigationView 并且不工作向后滑动,在 UIKit NavigationController 中如何,为什么? 二、如何为我的情况正确创建导航流程: 我有 AuthView()、SelectedLanguageView() 和 OnboardingView()。 首先启动用户显示 SelectedLanguageView(),下一个 OnboardingView(),最后显示 AuthView() 用户不能使用 OnboardingView() 返回 SelectedLanguageView() 并使用 AuthView() 返回 AuthView() 只是 NavigationLink 在没有 NavigationView 的情况下无法工作,为什么? 如果这不是第一次启动,并且用户未授权,则显示 AuthView(),否则如果用户授权,则显示 MainView(), MainView() 包含 4 个项目的标签栏,每个项目都有 NavigationView
@State private var navBarHidden = true
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
let languagSettings = UserLanguageSettings()
UserDefaults.standard.set(false, forKey: "isNotFirstLaunchApp")
if let windowScene = scene as? UIWindowScene
let window = UIWindow(windowScene: windowScene)
if UserDefaults.standard.bool(forKey: "isNotFirstLaunchApp") == false
window.rootViewController = UIHostingController(rootView: OnboardingView(navBarHidden: $navBarHidden).environmentObject(languagSettings))
else
window.rootViewController = UIHostingController(rootView: AuthorizationView(navBarHidden: $navBarHidden.not, isAddNavView: true).environmentObject(languagSettings))
self.window = window
window.makeKeyAndVisible()
尚未添加用户是否被授权的条件
var isAddNavView: Bool = false
var body: some View
if isAddNavBar
return NavigationView
ZStack
VStack
Text("")
else
return ZStack
VStack
Text("")
我有错误,如果返回 NavigationView,如果删除 NavigationView 并返回 ZStack,那么可以。我认为有更好的解决方案。 想法?
NavigationLink(destination: SignInView(), isActive: $isShowingSignInView)
EmptyView()
Button(action:
self.isShowingSignInView.toggle()
)
Text("isShowingSignInView")
我使用的项目中的所有导航链接都是这样
下一步 - 我尝试了以下方法: 在所有项目中,我删除所有 NavigationView 并创建模态显示屏幕(.sheet) 在 AuthorizationView() 我有变量@State 例如,在 AuthorizationView() 我有
@State var isShowRegistration: Bool = false
点击按钮注册显示流程注册包括4个屏幕,显示为.sheet
RegistrationView(registrationView: $isShowRegistration)
//screens below include @Binding var registrationView: Bool
VerificationView(registrationView: $registrationView)
SetupPasswordView(registrationView: $registrationView)
EndRegistrationViewAndAuthorization(registrationView: $registrationView)
在 EndRegistrationViewAndAuthorization 上我有按钮,理想情况下我需要关闭所有以前的屏幕并调用 func Auth() 这将打开应用程序的主屏幕,其中每个项目都包括 NavigationView。现在我的按钮操作 self.registrationView.toogle() 返回 RegistrationView() 但应该返回 AuthorizationView()
【问题讨论】:
【参考方案1】:我有错误,如果返回 NavigationView,如果删除 NavigationView 并返回 ZStack,那么可以。我认为有更好的解决方案。想法?
对于 SwiftUI 1.0,以下应该可以工作
var body: some View
Group
if isAddNavBar
NavigationView
ZStack
VStack
Text("")
else
ZStack
VStack
Text("")
【讨论】:
好的,谢谢!解决了一小部分问题:]以上是关于SwiftUI (1.0) 中的导航问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift UI 中单击按钮时从 swift UI 导航到情节提要?