UITableViewと詳細ビューがUINavigationControllerに組み込まれています: 「My Notes」の大きなタイトルをオンにしますが、詳細ビューではオフにします。 iPhoneでのデフォルトのメールアプリの動作のようなもの。そのセグエの間にナビゲーションバーのprefersLargeTitle
プロパティを変更するにはどうすればよいですか?
とても簡単です。
DetailViewでnavigationItem.largeTitleDisplayModeを。neverに設定する必要があります
(navigationController?.navigationItem.largeTitleDisplayMode!!ではありません!!)
navigationItem.largeTitleDisplayMode = .never
次の両方のいずれかが問題を解決します。
ナビゲーションバーのprefersLargeTitlesをfalseに設定します
self.navigationController?.navigationBar.prefersLargeTitles = false
navigationItemのlargeTitleDisplayModeをneverに設定します(注:prefersLargeTitlesはfalseでなければなりません。そうしないと機能しません)
self.navigationController?.navigationItem.largeTitleDisplayMode = .never
注:prefersLargeTitles
がtrueの場合、largeTitleDisplayMode = .neverは機能しません。ナビゲーションバーの小さなタイトル表示は、prefersLargeTitles
に依存しています
値がtrueの場合、これにより大タイトルモードが有効になります。
self.navigationController?.navigationBar.prefersLargeTitles = true
largeTitleDisplayMode
をneverに設定し、詳細prefersLargeTitles
でViewController
をfalseに設定すると、小さなタイトルが1秒間表示され続けます。 ViewController
戻るボタンを使用して、前のViewController
の詳細UINavigationBar
を表示します。
セグエが実行される前にタイトルを元に戻すには、willMove(toParent:)
関数を使用します。
override func willMove(toParent parent: UIViewController?) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}
私は今、同じ問題を抱えていました。
私のユースケース:
MasterVC: largeTitleのない基本的なナビゲーションバー
DetailVC: largeTitle有効
-> DetailVCからMasterVCに戻ると、基本的なnonlargeTitleレイアウトに戻る前に、マスター上でlargeTitleが1秒間表示される奇妙なアニメーションが表示されていました。それはグリッチのように見えた。
このアプローチに従って修正しました。
In MasterVC-viewDidLoad
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .never
navigationController?.navigationBar.prefersLargeTitles = false
}
詳細VC-viewDidLoad
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
}
それが他の人の助けになることを願っています。
if #available(iOS 11.0, *) {
self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never
} else {
// Fallback on earlier versions
}
それは非常に遅いかもしれませんが、これは誰かに役立つ可能性があります。
詳細ビューコントローラのviewDidLoadの下に以下のコードを含めます
navigationItem.largeTitleDisplayMode = .never
.navigationBarTitle("Title", displayMode: .inline)