diff --git a/ios/App/App/NativePageViewController.swift b/ios/App/App/NativePageViewController.swift index aea98500b8..1088425e65 100644 --- a/ios/App/App/NativePageViewController.swift +++ b/ios/App/App/NativePageViewController.swift @@ -8,7 +8,7 @@ import UIKit -class NativePageViewController: UIViewController { +class NativePageViewController: UIViewController, UIGestureRecognizerDelegate { let targetPath: String let push: Bool @@ -29,7 +29,37 @@ class NativePageViewController: UIViewController { SharedWebViewController.instance.attach(to: self) } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + navigationController?.interactivePopGestureRecognizer?.isEnabled = true + } + override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) + + guard let nav = navigationController, + let popGesture = nav.interactivePopGestureRecognizer else { return } + + popGesture.delegate = self + let isSidebar = (targetPath == "/left-sidebar") + popGesture.isEnabled = !isSidebar && nav.viewControllers.count > 1 + } + + func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { + guard + let nav = navigationController, + gestureRecognizer === nav.interactivePopGestureRecognizer + else { return true } + + if targetPath == "/left-sidebar" { + return false + } + return nav.viewControllers.count > 1 + } + + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, + shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { + guard let nav = navigationController else { return false } + return gestureRecognizer === nav.interactivePopGestureRecognizer } }