创建没有后退按钮 SwiftUI 的 NavigationLink
Posted
技术标签:
【中文标题】创建没有后退按钮 SwiftUI 的 NavigationLink【英文标题】:Create a NavigationLink without back button SwiftUI 【发布时间】:2020-02-22 00:22:09 【问题描述】:我试图链接 SomeView1() 中的按钮操作以导航到 someView2() 而不在屏幕顶部有后退按钮。相反,我想在 SomeView2() 中添加另一个按钮,该按钮将导航回 SomeView1()。这在 SwiftUI 中是否可行?
SomeView1()
struct SomeView1: View
var body: some View
NavigationView
VStack
//...view's content
NavigationLink(destination: SomeView2())
Text("go to SomeView2")
Spacer()
SomeView2()
struct SomeView2: View
var body: some View
NavigationView
VStack
//...view's content
NavigationLink(destination: SomeView1())
Text("go to SomeView1")
Spacer()
这就是它的样子:
【问题讨论】:
【参考方案1】:在这里得到你想要的东西的正确方法是使用presentationMode
环境变量:
import SwiftUI
struct View2: View
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View
VStack
Button(action:
self.presentationMode.wrappedValue.dismiss()
)
Text("POP")
.navigationBarTitle("")
.navigationBarBackButtonHidden(true)
.navigationBarHidden(true)
struct ContentView: View
var body: some View
NavigationView
NavigationLink(destination: View2())
Text("PUSH")
.navigationBarTitle("")
.navigationBarHidden(true)
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
【讨论】:
谢谢,这正是我想要的!我希望文档有更多关于这些事情的信息 最佳解决方案 =)【参考方案2】:你可以在SomeView2()
做这样的事情:
NavigationView
VStack
//...view's content
NavigationLink(destination: SomeView1())
Text("go to SomeView1")
Spacer()
.navigationBarBackButtonHidden(true)
【讨论】:
这确实隐藏了后退按钮,但是当您导航时它仍然将视图向下推到屏幕上(好像它仍然为后退按钮腾出空间)。在 2 个视图之间来回导航后,视图会在屏幕的中间位置结束 你也可以试试.navigationBarHidden(true)
我仍然遇到同样的问题。我添加了一张图片供参考
除了 NavigationLink 之外还有其他方法吗?
这个答案似乎是最明智的,特别是如果 NavigationView 中有多个导航链接需要相同的行为。但是,我发现需要的是 .navigationBarHidden(true)【参考方案3】:
我认为您应该在整个导航过程中只使用一个 NavigationView。现在,您在彼此内部拥有了三个 NavigationView,这会产生三个后退按钮。
所以在你的情况下,它会变成这样:
struct SomeView1InsideNavigationView: View // This should be the first view you present
var body: some View
NavigationView // Use NavigationView only once
SomeView1()
struct SomeView1: View
var body: some View
VStack // Do *not* use NavigationView here
//...view's content
NavigationLink(destination: SomeView2())
Text("go to SomeView2")
Spacer()
struct SomeView2: View
var body: some View
VStack // Do *not* use NavigationView here
//...view's content
NavigationLink(destination: SomeView1())
Text("go to SomeView1")
Spacer()
【讨论】:
以上是关于创建没有后退按钮 SwiftUI 的 NavigationLink的主要内容,如果未能解决你的问题,请参考以下文章
在没有以前 NavigationLink 的 SwiftUI NavigationView 上显示系统后退按钮
SwiftUI 将 navigationBarItems 按钮与“消息”中的大 navigationBarTitle 对齐
如何在 SwiftUI 视图中包装 UIBarButtonItem?