오류해결: View간 NavigationBar Title의 크기가 바뀌지 않던 문제

Minseok, Kim·2021년 12월 14일
0

요약

VC1에서 prefersLargeTitlestrue로 놔둔 상태에서
VC2의 largeTitleDisplayMode.always 또는 .never로 설정하는 것이 답이였다.

발생한 오류

NavigationController가 Embed된 VC1, 그리고 VC2가 있다고 가정하자.
내가 구현하고 싶었던 것은 VC1에서 VC2로 이동할 때
VC1의 title은 크게, VC2의 title은 작게 설정하는 것이였다.

하지만 여러 시도에도 불구하고 다음과 같은 오류들이 발생했다.

  • VC1과 VC2의 title이 모두 크게 설정됨.
  • VC1에서 VC2로 이동시 title이 작아지기는 하나, VC1으로 다시 이동하면 VC1은 작은 상태임.

문제의 코드

나는 title을 VC1의 prefersLargeTitles의 값으로만 제어하려 했다.
따라서 문제의 코드는 다음과 같은 모습을 보였다.
VC1

override func viewWillAppear(_ animated: Bool) {
	self.navigationController?.navigationBar.prefersLargeTitles = true
    	self.navigationController?.navigationBar.sizeToFit()
}

//VC2로의 transition 완료(본코드에는 RxSwift 활용)
transitionToVC2Complete() {
	self.navigationController?.navigationBar.prefersLargeTitles = false
}

해결방법

이 문제를 해결하는 법은 title의 크기를 prefersLargeTitles로 control하는 것이 아닌,
navigationItemlargeTitleDisplayMode를 사용하는 것이였다.

VC1에서 prefersLargeTitlestrue로 놔둔 상태에서
VC2의 largeTitleDisplayMode.always 또는 .never로 설정하는 것이 답이였다.

즉 다음과 같이 작성해야 정상적으로 작동한다. 세상에...
VC1

override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.navigationBar.prefersLargeTitles = true
}
    
override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.navigationBar.sizeToFit()
}

VC2

override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationItem.largeTitleDisplayMode = .never
    }
profile
iOS, Swift Dev

0개의 댓글