前編に引き続きNavigationViewの解説をしていきます。
前回はこちら↓
navigationTitleモディファイア
NavigationViewにタイトルをつけることができるモディファイア。
公式リファレンス↓
実際の動作
一つ目と二つ目のソースコードの差は__navigationTitleをつけたかどうか__だけです。
実際のソースコードを見てみましょう。
ソースコード
import SwiftUI
struct ContentView: View {
let regions = ["カントー地方", "ジョウト地方", "ホウエン地方", "シンオウ地方"]
var body: some View {
VStack{
// ここから
HStack{
Spacer()
Button(action: {}, label: {
Text("ヘルプ")
})
}
.padding(.horizontal)
// ここまではNavigationViewに含まれない
NavigationView {
List(0..<4) { n in
NavigationLink(regions[n], destination: Region(id: n, regionName: regions[n]))
}
.navigationTitle("そらをとぶ") //ここでタイトルをつけている
}
}
}
}
.navigationTitle
というコードのみで、フォントの大きさや太さをタイトルっぽくしてくれます。
navigaitonTitleには次のような機能もあります。
「もどる」ボタンの名前になる
このように、__前の画面にもどるためのボタンの名前__として、navigationTitleがそのまま使われます。
また、画面遷移のときにアニメーションも自動でつけてくれます。(動画参照)
navigationTitleはどこに書く?
よくある間違い(主に私が)として、次のように書くパターンがあります。
NavigationView {
List(0..<4) { n in
NavigationLink(regions[n], destination: Region(id: n, regionName: regions[n]))
}
// .navigationTitle("そらをとぶ") //本来はここに書く
}
.navigationTitle("そらをとぶ") //NavigationViewの外側に書いている
このように書くと、エラーにはなりませんがタイトルは表示されなくなります。
navigationTitleはそもそも、ひとつの画面のタイトルでしかないため、遷移先には引き継がれません。各画面でnavigationTitleをつけることになります。
よって、__navigationTitleはNavigationViewの内側に書くものだ__と認識すると良いでしょう。
参考文献