iOS 커스텀 네비게이션에서 Swipe Back Gesture 유지하는 방법 (iOS 26 대응)
iOS에서 기본 UINavigationBar를 숨기고 커스텀 네비게이션을 사용하면 가장 많이 발생하는 문제가 바로 swipe back (뒤로가기 제스처)가 안 되는 현상이다.
특히 iOS 26에서는 네비게이션 내부 구조가 변경되면서 이 문제가 더 자주 발생한다.
1. 왜 swipe back gesture가 사라질까?
iOS의 뒤로가기 제스처는 내부적으로 interactivePopGestureRecognizer를 사용한다.
하지만 아래 상황에서 비활성화된다:
- navigationBarHidden = true 상태
- custom back button 사용
- navigationController delegate 변경
즉, 커스텀 네비게이션을 쓰면 기본 제스처가 끊기는 구조다.
2. 가장 간단한 해결 방법
interactivePopGestureRecognizer를 다시 활성화하면 된다.
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.interactivePopGestureRecognizer?.delegate = self
}
그리고 Delegate를 채택한다.
extension YourViewController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return navigationController?.viewControllers.count ?? 0 > 1
}
}
👉 이렇게 하면 다시 swipe back이 동작한다.
3. iOS 26에서 반드시 추가해야 하는 설정
iOS 26에서는 gesture가 더 엄격하게 관리되기 때문에 아래 설정을 함께 해주는 것이 안정적이다.
navigationController?.interactivePopGestureRecognizer?.isEnabled = true
그리고 충돌 방지를 위해:
navigationController?.interactivePopGestureRecognizer?.requiresExclusiveTouchType = false
4. BaseViewController로 공통 처리
실무에서는 모든 화면에 적용되도록 BaseViewController에서 처리하는 것이 좋다.
class BaseViewController: UIViewController, UIGestureRecognizerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.interactivePopGestureRecognizer?.delegate = self
navigationController?.interactivePopGestureRecognizer?.isEnabled = true
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return navigationController?.viewControllers.count ?? 0 > 1
}
}
👉 모든 화면에서 자동으로 swipe back 유지 가능
5. 커스텀 back 버튼과 충돌 해결
커스텀 back 버튼을 사용하면 gesture가 막히는 경우가 있다.
이럴 때는 다음을 확인해야 한다:
- leftBarButtonItem 대신 customView 사용 여부
- UIButton에 gesture가 가로채지 않는지 확인
추천 방식:
button.addTarget(self, action: #selector(backClick), for: .touchUpInside)
👉 UIGestureRecognizer를 직접 추가하지 않는 것이 중요하다.
6. swipe back이 안 되는 대표적인 실수
- viewDidLoad에서 navigationController nil 상태
- gesture delegate를 nil로 설정
- navigationController delegate를 덮어씀
- scrollView panGesture와 충돌
특히 ScrollView와 함께 사용할 때는 충돌이 발생할 수 있다.
7. ScrollView와 Gesture 충돌 해결
다음 설정을 추가하면 충돌을 줄일 수 있다.
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
👉 horizontal scroll과 swipe back 동시 인식 가능
정리
| 문제 | 해결 방법 |
|---|---|
| swipe back 안 됨 | interactivePopGestureRecognizer delegate 설정 |
| iOS 26 미동작 | isEnabled = true 추가 |
| 스크롤 충돌 | 동시 gesture 허용 |
| 커스텀 버튼 충돌 | UIButton target 방식 사용 |
마무리
커스텀 네비게이션을 사용할 때 swipe back gesture는 필수 UX 요소다.
특히 iOS 26에서는 내부 동작이 변경되었기 때문에 기존 방식으로는 동작하지 않는 경우가 많다.
위 방법을 적용하면 커스텀 네비게이션에서도 기본 iOS와 동일한 뒤로가기 경험을 유지할 수 있다.
'IT' 카테고리의 다른 글
| iOS 26 TabBar Liquid 스타일 완전히 제거하는 방법 (UITabBarAppearance 설정) (0) | 2026.03.31 |
|---|---|
| iOS 26 Liquid 네비게이션 스타일 완전히 제거하는 방법 (UINavigationBar 커스터마이징) (0) | 2026.03.31 |
| iOS 커스텀 네비게이션바 사용 시 isNavigationBarHidden 설정 방법 (iOS 26 대응) (0) | 2026.03.31 |
| OpenAI CLI 에러 해결 총정리 (npm, API Key, 권한 문제까지) (0) | 2026.03.26 |
| AI 코딩 도구 비교 (Cursor vs Copilot vs OpenAI CLI vs Ollama) (0) | 2026.03.26 |