VC1에서 prefersLargeTitles
를 true
로 놔둔 상태에서
VC2의 largeTitleDisplayMode
를 .always
또는 .never
로 설정하는 것이 답이였다.
NavigationController
가 Embed된 VC1, 그리고 VC2가 있다고 가정하자.
내가 구현하고 싶었던 것은 VC1에서 VC2로 이동할 때
VC1의 title
은 크게, VC2의 title
은 작게 설정하는 것이였다.
하지만 여러 시도에도 불구하고 다음과 같은 오류들이 발생했다.
title
이 모두 크게 설정됨.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하는 것이 아닌,
navigationItem
의 largeTitleDisplayMode
를 사용하는 것이였다.
VC1에서 prefersLargeTitles
를 true
로 놔둔 상태에서
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
}