iOS 11 の大きなタイトルのナビゲーションコントローラの表示方法

この記事は「Cocoa Advent Calendar 2017」の参加記事です。

iOS 11で大きなタイトルのナビゲーションコントローラが使えるようになりました。分かりやすい実例は、標準アプリの「ミュージック」だと思います。タブで画面を切り替えると、各画面のタイトルが大きく表示されます。アプリでもこの大きなタイトルのナビゲーションコントローラが使えるようになっています。

使い方の概要

次のようにすると、大きなタイトルのナビゲーションコントローラが表示されます。

  1. 「UINavigationBar」クラスに「prefersLargeTitles」というプロパティが追加されています。これを「true」にします。
  2. 「UINavigationItem」クラスの「largeTitleDisplayMode」プロパティに、「always」または「automatic」を設定します。

「largeTitleDisplayMode」プロパティは、3つの値が使用できます。「automatic」「always」「never」です。この中で「never」を指定すると従来の表示になります。「UINavigationBar」クラスの「prefersLargeTitles」を「true」にしていないと、どの値を指定しても変化しないので注意が必要です。
以下のコードは、テスト用に外から「largeTitleDisplayMode」を設定していますが、普通は各ビューコントローラの「viewDidLoad」メソッドなどで設定すれば良いと思います。

@IBAction func showAutomatic(_ sender: Any) {
    let tableViewController = ModeSelectorTableViewController(style: .plain)
    tableViewController.title = "Automatic"
    tableViewController.navigationItem.largeTitleDisplayMode = .automatic
    let navigationController = UINavigationController(rootViewController: tableViewController)
    navigationController.navigationBar.prefersLargeTitles = true
    self.present(navigationController, animated: true, completion: nil)
}

「largeTitleDisplayMode」の値による動作の違い

大きなタイトル表示は、上位のビューコントローラの設定に影響を受けます。値による動作の違いは次のようになっています。

「always」の動作

「always」は上位のビューコントローラの設定に関係無く、常に大きなタイトル表示を行います。この「常に」というのが紛らわしく、スクロールさせても小さな表示にならないという意味ではありません。「always」を指定した場合でも、スクロールさせて、トップが非表示になる位置になるとタイトル部分が小さくなります。

スクロールしていないとき

alwaysでスクロールさせたとき

「never」の動作

「never」は上位のビューコントローラの設定に関係無く、大きなタイトル表示を行いません。

neverを指定したとき

「automatic」の動作

「automatic」は上位のビューコントローラが「always」なら大きなタイトル表示を行い、「never」なら大きなタイトル表示を行わないという動作です。つまり、上位のビューコントローラの設定を引き継ぎます。ルートビューコントローラに指定した場合は、大きなタイトル表示を行います。

上位がalwaysのとき

上位がneverのとき

「leftBarButtonItem」や「rightBarButtonItem」、「prompt」の表示位置

大きなタイトルで表示されているときは、「leftBarButtonItem」や「rightBarButtonItem」はタイトルよりも上に表示されます。スクロールするなどして、小さな表示になると、タイトルの左右に表示されます。「prompt」は常にタイトルの上に表示されます。

iPhone XやiPadのときは?

iPhone XやiPadのときも同じような表示になります。デバイスに合わせて大きさは調整されますが。

投稿者プロフィール

林 晃
林 晃macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者
アールケー開発代表。macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者。ObjC/Swift/C++使い。豊富な開発実務経験を基に、教育コンテンツ開発、技術書執筆、技術指導、技術セミナー講師、企業内研修講師、行政・自治体職員研修講師も行います。

基礎から学ぶMetal


「基礎から学ぶMetal」を執筆しました。本書はMetalを使ってGPUプログラミングを行うための最初のステップを解説するMetalの解説書です。

私が初めてGPUプログラミングを行ったとき、どこから手をつけて、学んでいけば良いのか分からず呆然としました。もし、あのとき、これを教えてくれればという部分を解説しました。本書で解説している部分はMetalの基礎となる部分で、Metalを使うときに必ず触れることになる部分です。

詳細

基礎から学ぶSwiftUI


「基礎から学ぶ SwiftUI」というタイトルの本を執筆しました。

SwiftUIの入門書です。

SwiftUIのコンセプトは「ユーザーインターフェイスを作るための最短パスを提供する」「一度学べば(Appleのプラットフォームの)どこにでも適用できる」です。

SwiftUIの概要から始まって、一つ一つのテクノロジートピックに注目しながらSwiftUIとは何か?どんなことができるのか?どのようなコードを書けば良いのかなどを丸々一冊使って解説しています。

詳細

関連記事

  1. MSM 2019 で SwiftUI についてのセッションに登壇しまし…

  2. WordPressが重いときの対策方法

  3. iMessageのステッカーサンプル作成

  4. [お知らせ] C言語逆引きハンドブックのPDF版の販売が始まりました

  5. Lion Recovery Disk Assistantが公開されたよ…

  6. 課題管理に登録する課題の粒度について

最近の著書

  1. 基礎から学ぶ SwiftUI

最近の記事