Browse Source

fix: swipe back

Tienson Qin 3 months ago
parent
commit
42620fe276
1 changed files with 31 additions and 1 deletions
  1. 31 1
      ios/App/App/NativePageViewController.swift

+ 31 - 1
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
     }
 }