SwiftUI-navigationBarBackButtonHidden-向后滑动手势?

时间:2019-12-08 11:34:32

标签: swiftui

如果我设置了一个自定义的后退按钮(每个人都想要,隐藏丑陋的文本;-))并使用.navigationBarBackButtonHidden,则导航控制器上的标准“后退”手势不起作用。有没有办法将其恢复并具有自定义的后退按钮?

例如:

NavigationView {
    NavigationLink(destination: DummyViewer())
     {
       Text("Go to next view"
    } 
 }
struct DummyViewer: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    var body: some View {
        Text("Hello, World!").navigationBarBackButtonHidden(true)
            .navigationBarItems(leading:
                Button(action: { self.presentationMode.wrappedValue.dismiss()}) {
                    Text("Custom go back")
                }
        )
    }
}

如果这样做,我将无法滑动回到上一个视图,似乎手势已被禁用...如何找回?

BR 斯蒂芬

3 个答案:

答案 0 :(得分:6)

我发现创建自定义NavigationView没什么用,但是我发现通过扩展UINavigationController,我可以拥有一个自定义后退按钮和后退手势。

extension UINavigationController: UIGestureRecognizerDelegate {
    override open func viewDidLoad() {
        super.viewDidLoad()
        interactivePopGestureRecognizer?.delegate = self
    }

    public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return viewControllers.count > 1
    }
}

答案 1 :(得分:0)

您可以将标题设置为空的string。所以后退栏按钮标题将为空:

struct ContentView: View {

    var body: some View {

        NavigationView {

            NavigationLink(destination: Text("Here you are")) {

                Text("Next").navigationBarTitle("")
            }
        }
    }
}

您可以根据需要设置标题onAppearonDisappear

答案 2 :(得分:0)

如果仍然是here I answered,如何设置自定义后退按钮和保存后退手势。