220824 TIL [Navigation Bar가 hidden상태에서 뒤로가기 swipe가 작동하지 않는 현상 해결]

Doogie·2022년 8월 24일
0

로아랑 어플의 모든 navigation bar는 custom이다
그래서 최조 navigation view가 시작되는 tabBarController부터 navigation bar는 hidden이 되어 있다

navigation bar를 hidden시키면 뒤로가기 swipe가 작동하지 않는 치명적인 문제점이 있는데 나중에 고쳐야지... 나중에... 하다가 오늘 집에오는 길에 잠깐 서칭해봤는데 그렇게 어렵지 않은 내용이어서 바로 수정을 했다

일단 가장 중요한 것은
1. navigation bar를 hidden 시키면 pop 시키는 swipe gesture가 비활성화 된다
2. 다시 활성화 시키기 위해서 interactivePopGestureRecognizer의 delegate를 self로 지정해준다

2번에서의 self는 rootview가 될 수도 아니면 customnavigation class를 만들어서 해줄 수도 있겠지만 일단 이 어플에서 사용되는 모든 뷰는 기본 navigation bar를 사용하지 않을 것이기 때문에 UINavigationController를 extension해서 작성했다

전체 코드

extension UINavigationController: UIGestureRecognizerDelegate {
    open override func viewDidLoad() {
        super.viewDidLoad()
        interactivePopGestureRecognizer?.delegate = self
    }
    
    public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return viewControllers.count > 1
    }
}

참고로 viewControllers.count > 1의 조건을 달아 준 이유는
rootViewController에서 뒤로가기 스와이프를 작동하면 그 이후로 오류가 생겨서 (거의 앱이 죽는 수준) rootview위로 하나 이상 쌓였을 때만 뒤로가기 스와이프가 작동하도록 하게하는 조건이다

참고자료
https://velog.io/@tmdckd232/UIKit-%EB%93%9C%EB%9E%98%EA%B7%B8%EB%A1%9C-%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%92%A4%EB%A1%9C%EA%B0%80%EA%B8%B0

profile
끊임없이 문을 여는 개발자

0개의 댓글