[iOS] NavigationItem과 NavigationBar의 차이

lyoodong's avatar
May 21, 2024
[iOS] NavigationItem과 NavigationBar의 차이

UINavigationController

UINavigationController은 자식 ViewController의 화면 흐름을 제어하는 Container ViewController의 한 종류입니다. Container ViewController라는 개념은 하나 이상의 ViewController 중 어떤 ViewController를 화면(UIWindow)에 띄울지 결정하는 책임을 지닌 객체입니다.UINavigationControllerUITabBarController, and UIPageViewController 등이 있습니다.
notion image
 

UINavigationController은 navigation stack이라는 배열을 사용해 자식 ViewController의 계층을 관리합니다. 아래의 그림은 UINavigationController를 도식화한 그림입니다. 앞서 설명한 듯이 Navigation Stack에 하나 이상의 자식 ViewController들이 존재하는 것을 볼 수 있으며 이러한 배열의 push, pop 즉, 화면 전환은 navigationBar라는 객체가 주로 제어합니다. 필요에 의해서는 toolbar를 사용할 수도 있으며, delegate를 통해 이벤트를 전달하기도 합니다.
notion image
notion image

화면의 흐름을 제어하는 navigationBar의 구성은 아래와 같습니다. navigationBar는 일반적으로 Window의 최상단에 위치합니다. navigationBar는 items라는 배열을 가지고 있는데, navigation stack에 존재하는 모든 화면의 item을 말합니다. 현재 화면의 item에 접근하려면, topItem을 활용할 수 있습니다. 현재 stack의 최상단에 존재하는 화면이 곧, 현재 화면이기 때문입니다.
notion image
navigationController?.navigationBar.topItem //현재 화면의 item
navigationItem과의 차이 navigationBar를 커스텀하거나 설정을 변경하기 위해 구글링을 해보면, 많이들 보이는 요소가 navigationItem입니다. 얼핏 비슷해 보이지만, 두 객체는 엄연히 다른 객체입니다. 우선, navigationItem은 UIViewController에 속한 프로퍼티 입니다. 반면, navigationBar는 UINavigationController에 속한 프로퍼티입니다.

NavigationBar와 NavigationItem의 차이

UINavigationController는 네비게이션 바를 관리하고, 각 뷰 컨트롤러는 자신의 UINavigationItem을 통해 네비게이션 바의 내용을 정의합니다. 따라서, navigation stack에 존재하는 모든 item들이 가져야하는 공통적인 특성은 navigationBar를 통해 설정하고, 개별 ViewController에서 변경되어야 할 부분은 navigationItem을 통해 설정합니다. 이는 각 객체에 속한 프로퍼티만 보더라도 알 수 있습니다.
 
navigationItem
  • title
  • titleView
  • backBarButtonItem
  • backButtonTitle
  • hidesBackButton
  • leftBarButtonItem
  • rightBarButtonItem
  • largeTitleDisplayMode
  • searchController
  • hidesSearchBarWhenScrolling
navigationBar
  • barStyle
  • isTranslucent
  • topItem
  • backItem
  • prefersLargeTitles
  • tintColor
  • barTintColor
  • setBackgroundImage()
  • titleTextAttributes
  • largeTitleTextAttributes
 
정리하면, navigationBar는 UINavigationController에 의해 관리되며, 전역적인 설정이 필요할 때 접근합니다. 반면, navigationItem은 UIViewController에 의해 관리되며, 개별적인 설정이 필요할 때 접근합니다.
 

출처
 
Share article
RSSPowered by inblog