web-dev-qa-db-ja.com

UINavigationBarの大きなタイトルをオフにするにはどうすればよいですか?

UITableViewと詳細ビューがUINavigationControllerに組み込まれています: enter image description here 「My Notes」の大きなタイトルをオンにしますが、詳細ビューではオフにします。 iPhoneでのデフォルトのメールアプリの動作のようなもの。そのセグエの間にナビゲーションバーのprefersLargeTitleプロパティを変更するにはどうすればよいですか?

15
A Tyshka

とても簡単です。

DetailViewnavigationItem.largeTitleDisplayMode。neverに設定する必要があります

navigationController?.navigationItem.largeTitleDisplayMode!!ではありません!!)

navigationItem.largeTitleDisplayMode = .never
5

次の両方のいずれかが問題を解決します。

  1. ナビゲーションバーのprefersLargeTitlesをfalseに設定します

    self.navigationController?.navigationBar.prefersLargeTitles = false
    
  2. navigationItemのlargeTitleDisplayModeをneverに設定します(注:prefersLargeTitlesはfalseでなければなりません。そうしないと機能しません)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .never
    

prefersLargeTitlesがtrueの場合、largeTitleDisplayMode = .neverは機能しません。ナビゲーションバーの小さなタイトル表示は、prefersLargeTitlesに依存しています

値がtrueの場合、これにより大タイトルモードが有効になります。

self.navigationController?.navigationBar.prefersLargeTitles = true
5
Krunal

largeTitleDisplayModeをneverに設定し、詳細prefersLargeTitlesViewControllerをfalseに設定すると、小さなタイトルが1秒間表示され続けます。 ViewController戻るボタンを使用して、前のViewControllerの詳細UINavigationBarを表示します。

セグエが実行される前にタイトルを元に戻すには、willMove(toParent:)関数を使用します。

スイフト4

override func willMove(toParent parent: UIViewController?) {
    navigationItem.largeTitleDisplayMode = .always
    navigationController?.navigationBar.prefersLargeTitles = true
}
4
Aaron

私は今、同じ問題を抱えていました。

私のユースケース:

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
} 

それが他の人の助けになることを願っています。

4
Edouard Barbier
    if #available(iOS 11.0, *) {
        self.navigationItem.largeTitleDisplayMode = UINavigationItem.LargeTitleDisplayMode.never
    } else {
        // Fallback on earlier versions
    }
1
A Tyshka

それは非常に遅いかもしれませんが、これは誰かに役立つ可能性があります。

詳細ビューコントローラのviewDidLoadの下に以下のコードを含めます

navigationItem.largeTitleDisplayMode = .never
1
Harie venad

SwiftUIバージョン

.navigationBarTitle("Title", displayMode: .inline)
0
VojtaStavik