iOS 11 Beta 1では、ほとんどすべてのシステムアプリでナビゲーションバーのタイトルが増えました(iOS 10とMusicアプリでこれを始めました)。私は、AppleがiOS 11に入ってくるこのためのパブリックAPIを持っているのか、それとも今のところプライベートのままでいるのかどうかと思っている。
この動作は、タイトルのフォントサイズが大きくなり、左寄せになり、ユーザーがスクロールダウンするとナビゲーションバーに移動することです。この動作を示す画面をメッセージアプリに添付しました。
これまでのところUINavigationController
とUINavigationBar
の中で参照を見つけることができませんでしたが、誰かがもっと詳細を知っているかもしれません!
IOS 11用のUINavigationBar
APIに行われた唯一の変更はprefersLargetitles
のみです。チェック ここ
あなたは1つの小さな変更であなた自身のアプリにそれをすることができます:IBであなたのナビゲーションバーのために「大きいタイトルを好む」をチェックするか、あなたがコードを使ってそれをするのを好むなら
navigationController?.navigationBar.prefersLargeTitles = true
編集
大きなタイトルのテキスト属性を変更する必要がある場合は、largeTitleTextAttributes
の新しいUINavigationBar
プロパティを使用する必要があります。
UINavigationBar.appearance().largeTitleTextAttributes = [
NSForegroundColorAttributeName: UIColor.white
]
NSForegroundColorAttributeName
はNSAttributedString.Key.foregroundColor
に名前が変更されたので、以下を使用してください。
UINavigationBar.appearance().largeTitleTextAttributes = [
NSAttributedString.Key.foregroundColor: UIColor.black
]
UINavigationBar
にはprefersLargeTitles: Bool
プロパティがあります。 ドキュメントはこちら 。
class UINavigationBar {
var prefersLargeTitles: Bool
}
UINavigationItem
にはlargeTitleDisplayMode: UINavigationItem.LargeTitleDisplayMode
プロパティがあります。 ドキュメントはこちら 。
class UINavigationItem {
var largeTitleDisplayMode: LargeTitleDisplayMode
}
どちらもInterface Builderで変更できます。
この動作を有効にするには、navigationController.navigationBar.prefersLargeTitles
をtrue
に設定します。その後、navigationItem.largeTitleDisplayMode
を設定して、ナビゲーションコントローラスタック内の個々のView Controllerを制御できます。
Appleによる一般的な設計ガイドラインは、大きなタイトルはどこにでも使用するべきではないということです(例えば、Clockアプリはそれらを使用しません)。そして、ナビゲーションコントローラの最初のレベルだけが大きなタイトルを使用するのが一般的に好まれます。ただし、これらはあくまで一般的なガイドラインです。
大きなタイトルは Cocoa Touchビデオの新機能 (7:37)で紹介されています。
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
}
if #available(iOS 11.0, *) {
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationItem.largeTitleDisplayMode = .always
} else {
// Fallback on earlier versions
}
ベータ1には、手動で上にスクロールしたときにのみ大きなタイトルが表示されるバグがいくつかあります。