navigationBarHidden은 해도 Navigation Swipe Pop은 하고 싶어

SteadySlower·2023년 12월 6일
0

SwiftUI

목록 보기
56/64
post-custom-banner

Navigation Swipe Pop이란?

정확한 용어인지는 모르겠지만 여기서는 아이폰 왼쪽 구석을 오른쪽으로 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
    }
}
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.
post-custom-banner

0개의 댓글