SwiftUI - navigationBarBackButtonHidden - 向后滑动手势?

Posted

技术标签:

【中文标题】SwiftUI - navigationBarBackButtonHidden - 向后滑动手势?【英文标题】:SwiftUI - navigationBarBackButtonHidden - swipe back gesture? 【发布时间】:2019-12-08 11:34:32 【问题描述】:

如果我设置了一个自定义后退按钮(每个人都想要,隐藏丑陋的文本 ;-))并使用 .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 史蒂芬

【问题讨论】:

这能回答你的问题吗? Hide navigation bar without losing swipe back gesture in SwiftUI 【参考方案1】:

我发现创建自定义 NavigationView 没有任何效果,但我发现通过扩展 UINavigationController 我能够拥有自定义后退按钮和向后滑动手势。

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

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

【讨论】:

这仍然有效(ios 13.2 上的 Xcode 11.4.1) 仍然适用于 iOS 14.2。多么强大的咒语! 在 14.5 中仍然有效,谢谢!我想知道这意味着什么,因为这将应用于全球所有导航控件 适用于 iOS 15 Developer Beta 1 这太棒了【参考方案2】:

如果它仍然是实际的,here I answered,如何设置自定义返回按钮并保存滑动返回手势。

【讨论】:

【参考方案3】:

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

struct ContentView: View 

    var body: some View 

        NavigationView 

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

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

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

【讨论】:

嗨,我添加了更多信息。这是关于后退按钮和它导致的滑动手势 - 或不是。

以上是关于SwiftUI - navigationBarBackButtonHidden - 向后滑动手势?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 学习曲线

SwiftUI NavigationLink 如何到达另一个 SwiftUI 页面?

SwiftUI - 如何在 SwiftUI 中弹出到特定视图?

SwiftUI3.0将UIKit ViewController转化成 swiftUI的view

SwiftUI 五

SwiftUI/UIKit 如何将 SwiftUI 字体转换为 UIKit UIFont?