Skip to content

[UIKit] 왜 네비게이션 타이틀이 Large가 아닌 small로 나오는 걸까?

Ari edited this page Jul 24, 2022 · 1 revision

분명 네비게이션 바를 전역적으로 설정해서 prefersLargeTitles 프로퍼티를 true로 할당해주었는데, 이상하게 RxSwift로 뷰 바인딩 처리를 하면 아래같은 현상이 나타났다.

밑으로 스크롤을 해야만 큰 사이즈의 네비게이션 타이틀이 나타났다.

왜 자동으로 small 사이즈로 스크롤 되어 뷰가 나타나는지 원인 분석을 하기 시작했다.

  • 뷰 바인딩 처리를 할 때 혹시 레이아웃을 건드리는 지점이 있나 확인해보았지만 전혀 없었다.
  • 스크롤 문제인건가 싶어서 스크롤을 맨 위로 지정해주는 작업도 시도해보았지만 효과가 없었다.

그러다가 찾게된 방법....

해결 방법

네비게이션 바에는 sizeToFit() 이라는 메소드가 존재한다.

  • UIKit에 포함된 특정 뷰를 자체 내부 요구 사이즈로 resize 해주는 함수이다.
  • 그래서 기존의 설정 값인 Large Title 사이즈로 네비게이션 바를 리사이즈 해준다.

따라서 이 메소드를 활용해서 해결해보기로 했다.

  • 처음에는 네비게이션 아이템을 설정할 때 sizeToFit을 호출해보았는데, 간헐적으로 적용되는 현상이 일어났다.

그래서 View life cycle을 활용하여 뷰가 서브뷰의 위치를 재조정하는 시점에 메소드를 호출하였다.

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    navigationController?.navigationBar.sizeToFit()
}

위와 같이 호출해주니 정상적으로 Large Title로 나오게 되면서 문제가 해결되었다!!! 😇


Clone this wiki locally