반응형
iOS 커스텀 네비게이션바 사용 시 isNavigationBarHidden 설정 방법 (iOS 26 대응)
iOS 앱을 개발하다 보면 기본 UINavigationBar 대신 커스텀 네비게이션바를 사용하는 경우가 많다. 특히 iOS 26 이후 디자인 변화로 인해 커스텀 UI를 사용하는 경우가 더 늘어나는 추세다.
이때 반드시 고민해야 하는 부분이 바로 isNavigationBarHidden 설정이다. 잘못 설정하면 UI가 겹치거나, 뒤로가기 시 네비게이션이 사라지는 문제가 발생한다.
1. 완전히 커스텀 네비게이션을 사용하는 경우
이 경우는 가장 단순하다.
navigationController?.setNavigationBarHidden(true, animated: false)
👉 반드시 true로 설정해야 한다.
- 기본 네비게이션바와 커스텀 UI가 겹치는 문제 방지
- SafeArea 충돌 방지
- iOS 26의 liquid 스타일 UI 제거 효과
즉, 완전 커스텀 = 무조건 숨김이라고 보면 된다.
2. 일부 화면만 커스텀 네비게이션 사용하는 경우
실무에서 가장 많이 사용하는 패턴이다.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(false, animated: animated)
}
👉 핵심 포인트:
- 현재 화면에서는 숨김
- 다음 화면으로 이동 시 다시 표시
이렇게 하지 않으면:
- 뒤로가기 시 네비게이션이 사라지는 버그 발생
- 화면 전환 시 UI 상태 꼬임
3. viewDidLoad에서 설정하면 안 되는 이유
// ❌ 잘못된 방법
override func viewDidLoad() {
navigationController?.isNavigationBarHidden = true
}
👉 문제점:
- push/pop 타이밍과 맞지 않음
- interactive pop gesture 충돌
- 이전 화면 상태 복구 불가
반드시 viewWillAppear 기준으로 제어해야 한다.
4. SafeArea 처리 주의사항
네비게이션바를 숨기면 SafeArea가 변경된다.
view.safeAreaInsets.top
👉 값이 줄어들기 때문에 레이아웃이 깨질 수 있다.
해결 방법:
customNavView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
또는:
additionalSafeAreaInsets.top = customNavHeight
5. 실무에서 추천하는 구조
BaseViewController를 만들어서 공통 처리하는 것이 가장 안정적이다.
class BaseViewController: UIViewController {
var useCustomNavigationBar: Bool { false }
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(useCustomNavigationBar, animated: animated)
}
}
각 화면에서는 이렇게만 설정하면 된다.
override var useCustomNavigationBar: Bool { true }
👉 장점:
- 코드 중복 제거
- 네비게이션 상태 일관성 유지
- 유지보수 쉬움
정리
| 상황 | 설정 |
|---|---|
| 완전 커스텀 네비 | navigationBarHidden = true |
| 일부 화면만 커스텀 | viewWillAppear에서 토글 |
| viewDidLoad 설정 | 사용하지 않음 |
마무리
iOS 26 이후에는 네비게이션 UI의 기본 스타일이 크게 변경되면서 커스텀 네비게이션을 사용하는 경우가 더 많아졌다.
이때 navigationBarHidden 제어 위치와 타이밍을 정확히 이해하는 것이 중요하다.
잘못 설정하면 UI 깨짐, 네비게이션 오류, 뒤로가기 버그까지 발생할 수 있으니 위 구조를 기준으로 적용하면 안정적으로 구현할 수 있다.
반응형
'IT' 카테고리의 다른 글
| iOS 26 Liquid 네비게이션 스타일 완전히 제거하는 방법 (UINavigationBar 커스터마이징) (0) | 2026.03.31 |
|---|---|
| iOS 커스텀 네비게이션에서 Swipe Back Gesture 유지하는 방법 (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 |
| AI CLI로 iOS 개발 자동화하기 (Tuist / TCA 실무 활용 심화) (0) | 2026.03.26 |