为NavigationLink SwiftUI禁用向后滑动

时间:2019-12-21 17:20:04

标签: swiftui

如何在SwiftUI中禁用向后滑动手势?只能使用后退按钮关闭子视图。

5 个答案:

答案 0 :(得分:2)

通过隐藏导航栏中的后退按钮,可以禁止向后滑动手势。您可以使用.navigationBarItems()

设置自定义后退按钮
struct ContentView: View {
    var body: some View {
        NavigationView{
            List{
                NavigationLink(destination: Text("You can swipe back")){
                    Text("Child 1")
                }
                NavigationLink(destination: ChildView()){
                    Text("Child 2")
                }
            }
        }
    }
}

struct ChildView: View{
    @Environment(\.presentationMode) var presentationMode

    var body:some View{
        Text("You cannot swipe back")
            .navigationBarBackButtonHidden(true)
            .navigationBarItems(leading: Button("Back"){self.presentationMode.wrappedValue.dismiss()})
    }
}

答案 1 :(得分:1)

This answer显示了如何在SwiftUI中配置导航控制器(简而言之,使用UIViewControllerRepresentable获得对UINavigationController的访问权限)。 this answer显示了如何禁用滑动手势。结合它们,我们可以做类似的事情:

Text("Hello")
  .background(NavigationConfigurator { nc in
     nc.interactivePopGestureRecognizer?.isEnabled = false
  })

这样,您可以继续使用内置的后退按钮功能。

答案 2 :(得分:0)

以下内容将复制现有的iOS人字形图像。 为接受的答案。 就是将 “后背” 替换为图像 雪佛龙

 .navigationBarItems(leading: Button("Back"){self.presentationMode.wrappedValue.dismiss()})

使用

Button(action: {self.presentationMode.wrappedValue.dismiss()}){Image(systemName: "chevron.left").foregroundColor(Color.blue).font(Font.system(size:23, design: .serif)).padding(.leading,-6)}

答案 3 :(得分:0)

我使用Introspect库,然后我就这样做:

import SwiftUI
import Introspect

struct ContentView: View {
   var body: some View {
      Text("A view that cannot be swiped back")
           .introspectNavigationController { navigationController in
              navigationController.interactivePopGestureRecognizer?.isEnabled = false
      }
   }
}

答案 4 :(得分:0)

设置 navigationBarBackButtonHidden 后,将 navigationTitle 设置为 true 会丢失漂亮的动画。

所以我尝试了另一个答案

navigationController.interactivePopGestureRecognizer?.isEnabled = false

但这对我不起作用。

尝试以下代码后工作正常

NavigationLink(destination: CustomView()).introspectNavigationController {navController in
            navController.view.gestureRecognizers = []
        }

preview