禁用 NavigationLink SwiftUI 的向后滑动

sim*_*bac 6 swiftui

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

sim*_*bac 11

通过隐藏导航栏中的后退按钮,可以禁用向后滑动手势。您可以设置自定义后退按钮.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()})
    }
}

Run Code Online (Sandbox Code Playgroud)

  • 有没有办法隐藏后退按钮而不失去向后滑动功能? (5认同)
  • 这可行,但至少会失去您可能关心或不关心的后退按钮的本地化(即国际化)。 (2认同)

小智 7

添加此扩展对我有用(禁用在任何地方向后滑动,以及禁用手势识别器的另一种方法):

extension UINavigationController: UIGestureRecognizerDelegate {
    override open func viewDidLoad() {
        super.viewDidLoad()
        interactivePopGestureRecognizer?.delegate = self
    }
    
    public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 
        return false
    }
}
Run Code Online (Sandbox Code Playgroud)