UINavigationController侧滑返回失效

在 iOS 7 后,我们使用系统提供的 UINavigationController 时,都会带有一个左侧侧滑就返回上一级 ViewController 的功能。但是如果我们使用自定义的 UINavigationController 时,这个功能就会被取消。包括自定义了返回按钮、自定义了导航栏等等。

我们如果想要恢复这个功能,就需要在 UINavigationViewController 的代理方法中进行管理。

class NavigationViewController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //设置 NavigationViewController 的代理为自己
        self.interactivePopGestureRecognizer?.delegate = self
    }

}

// 扩展
extension NavigationViewController: UIGestureRecognizerDelegate {
    func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
        
        // 如果当前试图是根视图,强行返回会导致 bug。所以要判断子视图的数量。
        return self.childViewControllers.count > 1
    }
}

你可能感兴趣的:(UINavigationController侧滑返回失效)