swiftui - SwiftUI (1.0) 中的导航问题
问题描述
首先我有 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 并在 AuthorizationView() 中创建模式显示屏幕 (.sheet) 我有变量 @State Example,在 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()
解决方案
我有错误,如果返回 NavigationView,如果删除 NavigationView 并返回 ZStack,那么好吧。我认为有更好的解决方案。想法?
对于 SwiftUI 1.0,以下应该可以工作
var body: some View {
Group {
if isAddNavBar {
NavigationView {
ZStack {
VStack {
Text("")
}
}
}
} else {
ZStack {
VStack {
Text("")
}
}
}
}
}
推荐阅读
- c - 一棵二叉树中有多少个节点只有一个孩子?
- akka-stream - 重用 Source[ByteString, Any] 的任何方式(不将其全部保存在内存中)
- sql - PostgreSQL:从 JSONB 列中删除值
- r - 在 R 中使用 ggplot 为两个不同的组创建折线图
- mysql - 如果匹配模式,则删除字符串的匹配部分
- react-native - 更新到 React Native 0.56.0 后非项目文件中的 Jest SyntaxError
- python-2.7 - 不理解 sess.run 中的 feed_dict
- laravel - Laravel 5.2 withTrashed
- vue.js - 在模板中的同一元素上结合 v-for 和 v-show
- javascript - 在动态添加的表行中添加 datetimepicker 的问题