IT

iOS 커스텀 네비게이션바 사용 시 isNavigationBarHidden 설정 방법 (iOS 26 대응)

초코모찌롤 2026. 3. 31. 16:44
반응형

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 깨짐, 네비게이션 오류, 뒤로가기 버그까지 발생할 수 있으니 위 구조를 기준으로 적용하면 안정적으로 구현할 수 있다.

반응형