web-dev-qa-db-ja.com

iOS 11で強化されたナビゲーションバーのタイトルを使う

iOS 11 Beta 1では、ほとんどすべてのシステムアプリでナビゲーションバーのタイトルが増えました(iOS 10とMusicアプリでこれを始めました)。私は、AppleがiOS 11に入ってくるこのためのパブリックAPIを持っているのか、それとも今のところプライベートのままでいるのかどうかと思っている。

この動作は、タイトルのフォントサイズが大きくなり、左寄せになり、ユーザーがスクロールダウンするとナビゲーションバーに移動することです。この動作を示す画面をメッセージアプリに添付しました。

enter image description here

これまでのところUINavigationControllerUINavigationBarの中で参照を見つけることができませんでしたが、誰かがもっと詳細を知っているかもしれません!

53
Hans Knöchel

IOS 11用のUINavigationBar APIに行われた唯一の変更はprefersLargetitlesのみです。チェック ここ

あなたは1つの小さな変更であなた自身のアプリにそれをすることができます:IBであなたのナビゲーションバーのために「大きいタイトルを好む」をチェックするか、あなたがコードを使ってそれをするのを好むなら

navigationController?.navigationBar.prefersLargeTitles = true

編集

大きなタイトルのテキスト属性を変更する必要がある場合は、largeTitleTextAttributesの新しいUINavigationBarプロパティを使用する必要があります。

UINavigationBar.appearance().largeTitleTextAttributes = [
    NSForegroundColorAttributeName: UIColor.white
]

Swift 4.2用に更新します。

NSForegroundColorAttributeNameNSAttributedString.Key.foregroundColorに名前が変更されたので、以下を使用してください。

  UINavigationBar.appearance().largeTitleTextAttributes = [
      NSAttributedString.Key.foregroundColor: UIColor.black
  ]
103
Moin Shirazi

UINavigationBarにはprefersLargeTitles: Boolプロパティがあります。 ドキュメントはこちら

class UINavigationBar {
   var prefersLargeTitles: Bool
}

UINavigationItemにはlargeTitleDisplayMode: UINavigationItem.LargeTitleDisplayModeプロパティがあります。 ドキュメントはこちら

class UINavigationItem {
   var largeTitleDisplayMode: LargeTitleDisplayMode
}

どちらもInterface Builderで変更できます。

この動作を有効にするには、navigationController.navigationBar.prefersLargeTitlestrueに設定します。その後、navigationItem.largeTitleDisplayModeを設定して、ナビゲーションコントローラスタック内の個々のView Controllerを制御できます。

Appleによる一般的な設計ガイドラインは、大きなタイトルはどこにでも使用するべきではないということです(例えば、Clockアプリはそれらを使用しません)。そして、ナビゲーションコントローラの最初のレベルだけが大きなタイトルを使用するのが一般的に好まれます。ただし、これらはあくまで一般的なガイドラインです。

大きなタイトルは Cocoa Touchビデオの新機能 (7:37)で紹介されています。

10
kgaidis

ナビゲーションバーの属性インスペクタの「大きいタイトルを好む」をチェックするだけです。

enter image description here

6
Maor
if #available(iOS 11.0, *) {
    navigationController?.navigationBar.prefersLargeTitles = true
    navigationController?.navigationBar.topItem?.title = "Hello"
    navigationController?.navigationItem.largeTitleDisplayMode = .automatic

    let attributes = [
        NSAttributedStringKey.foregroundColor : UIColor.red,
        ]

    navigationController?.navigationBar.largeTitleTextAttributes = attributes
} else {
    // Fallback on earlier versions
}
5
Sai Sandeep
if #available(iOS 11.0, *) {
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationItem.largeTitleDisplayMode = .always
} else {
    // Fallback on earlier versions
}

ベータ1には、手動で上にスクロールしたときにのみ大きなタイトルが表示されるバグがいくつかあります。

5
Jordi Bruin