정확한 용어인지는 모르겠지만 여기서는 아이폰 왼쪽 구석을 오른쪽으로 swipe해서 현재 navigation stack에 가장 위에 있는 view를 pop하는 기능을 의미한다.
SwiftUI에서 NavigationStack을 사용할 때 하위 View에서 navigationBarHidden을 사용해서 네비게이션 바를 숨기는 뷰를 구현할 때가 있다. 이 경우에는 Navigation Swipe Pop을 사용할 수 없게 된다. (또는 navigation bar에 left bar button item을 구현한 경우)
해당 제스쳐를 담당하는 객체는 interactivePopGestureRecognizer이다. 아래 코드를 통해서 delegate를 UINavigationController로 지정해주고 gestureRecognizerShouldBegin를 통해서 Swipe Pop 제스쳐의 인식이 시작되야 하는 시점을 UINavigationController의 Stack에 ViewController가 1개 이상일 때로 지정해주는 것이다.
extension UINavigationController: UIGestureRecognizerDelegate {
override open func viewDidLoad() {
super.viewDidLoad()
// 1️⃣ delegate 지정
interactivePopGestureRecognizer?.delegate = self
}
// 2️⃣ delegate 메소드 구현
public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return viewControllers.count > 1
}
}