Swiftui 使用SwitUI执行操作后如何转到特定选项卡视图?

Swiftui 使用SwitUI执行操作后如何转到特定选项卡视图?,swiftui,Swiftui,我打算构建一个应用程序来管理虚拟数据中心服务器、防火墙策略、负载平衡器。。。。我有两个部分使用选项卡视图。其中一个显示您在数据中心中创建的所有元素的列表。另一部分是创建新元素。如果启动应用程序,我们将从列表部分开始。然后我尝试创建一个新服务器。为此,我转到“创建”部分,单击服务器并选择一个大小,这里是前两个我无法解决的问题: 为什么选择器的选项会跳到屏幕顶部?我怎样才能删除它? 屏幕顶部和选择器选项之间的空间过大。如何删除它? 最后一个问题是,在创建服务器之后,我返回到Create部分,我想直接

我打算构建一个应用程序来管理虚拟数据中心服务器、防火墙策略、负载平衡器。。。。我有两个部分使用选项卡视图。其中一个显示您在数据中心中创建的所有元素的列表。另一部分是创建新元素。如果启动应用程序,我们将从列表部分开始。然后我尝试创建一个新服务器。为此,我转到“创建”部分,单击服务器并选择一个大小,这里是前两个我无法解决的问题:

为什么选择器的选项会跳到屏幕顶部?我怎样才能删除它? 屏幕顶部和选择器选项之间的空间过大。如何删除它? 最后一个问题是,在创建服务器之后,我返回到Create部分,我想直接转到List部分。我怎么做

这里是基本代码,可以查看我遇到的问题。提前感谢您的帮助

导入快捷键 结构ContentView:View{ @状态私有变量selectedTab=1 var body:一些观点{ 选项卡视图选择:$selectedTab{ CreateView .tabItem{ ImagesystemName:plus 文本创建 }.tag0 列表视图 .tabItem{ ImagesystemName:cloud 文本列表 }.tag1 } } } 结构CreateView:View{ var body:一些观点{ VStack{ 导航视图{ 名单{ NavigationLinkdestination:CreateServerView{ 文本服务器 } 文本防火墙策略 文本负载平衡器 } .NavigationBartitle选择要创建的元素,显示模式:。内联 } } } } 结构列表视图:视图{ var body:一些观点{ 导航视图{ 名单{ Sectionheader:TextServers{ 文本服务器1 文本服务器2 } Sectionheader:TextFirewall策略{ 文本防火墙1 文本防火墙2 } } .navigationBarTitleMy虚拟数据中心,显示模式:。大 } } } 结构CreateServerView:视图{ @环境\.presentationMode变量presentationMode:绑定 @国家私有变量名称:字符串= @状态私有变量selectedFixServer=0 @国家私有变量serverType=[S,M,L,XL] var body:一些观点{ 导航视图{ 形式{ Sectionheader:服务器的文本名称{ text字段名,text:$name } Pickerselection:$selectedFixServer,标签:TextSize{ ForEach0..一种变体是使用.pickerStyleSegmentedPickerStyle,但我不知道这是否适合你。通过此决策,2个问题得以解决,您不需要太多空间:

现在关于:

直接转到列表部分

在您的示例中,我只是在CreateServerView中设置@Binding var selectedTab,并在删除之前对其进行更改:

结构CreateServerView:视图{ // ... @绑定变量selectedTab:Int // ... 尾随: 按钮操作:{ self.selectedTab=1 self.presentationMode.wrappedValue.disclose } { 文本创建 } // ... }
您需要传递此变量,它将在创建服务器后直接进入列表

一个变量是使用.pickerStyleSegmentedPickerStyle,但我不知道这是否适合您。通过此决策,2个问题得以解决,您不需要太多空间:

现在关于:

直接转到列表部分

在您的示例中,我只是在CreateServerView中设置@Binding var selectedTab,并在删除之前对其进行更改:

结构CreateServerView:视图{ // ... @绑定变量selectedTab:Int // ... 尾随: 按钮操作:{ 自我选择 dTab=1 self.presentationMode.wrappedValue.disclose } { 文本创建 } // ... } 您需要传递此变量,它将在创建服务器后直接转到列表

为什么选择器的选项会跳到屏幕顶部?我怎样才能删除它? 屏幕顶部和选择器选项之间的空间过大。如何删除它? 这是因为您在现有NavigationView中创建了第二个NavigationView。所以要解决这个问题,只需删除CreateServerView中的NavigationView,比如说用VStack替换它,等等

注意:当我尝试您的代码时,我还对下面两行进行了注释

//                .navigationBarTitle("")
//                .navigationBarHidden(true)
为什么选择器的选项会跳到屏幕顶部?我怎样才能删除它? 屏幕顶部和选择器选项之间的空间过大。如何删除它? 这是因为您在现有NavigationView中创建了第二个NavigationView。所以要解决这个问题,只需删除CreateServerView中的NavigationView,比如说用VStack替换它,等等

注意:当我尝试您的代码时,我还对下面两行进行了注释

//                .navigationBarTitle("")
//                .navigationBarHidden(true)

你只需要使用这样一个变量,而不是。例如pickerStyleSegmentedPickerStyle?你只需要使用这样一个变量,而不是。例如pickerStyleSegmentedPickerStyle?在这种情况下,不可能以这种方式与picker交互,或者需要更改pickerStyle tooThanks@Asperi。这就解决了跳跃的问题。老实说,从左到右还有一个小小的跳跃,但它确实很小。关于您删除的行,似乎是betas中需要的一个旧修复程序,以使导航栏不可见。现在,它是不需要的。在这种情况下,不可能以这种方式与picker交互,或者需要更改pickerStyle tooThanks@Asperi。这就解决了跳跃的问题。老实说,从左到右还有一个小小的跳跃,但它确实很小。关于您删除的行,似乎是betas中需要的一个旧修复程序,以使导航栏不可见。现在,不需要了。绑定成功了。谢谢关于小跳跃是一个很好的选择,你所支持的,但对我的目的无效,所以在真正的应用程序中有很多尺寸,但这是通过@Asperthe binding解决的。谢谢关于小跳跃是一个很好的选择,你所支持的,但对我的目的无效,所以在真正的应用程序中有很多尺寸,但是@asperi解决了这个问题