NavigationStack の基本構造
NavigationStack は iOS 16 で導入された画面遷移を管理するコンテナです。従来の NavigationView を置き換えるもので、より柔軟なナビゲーション制御が可能になりました。
NavigationStack の基本
NavigationStack でビューを囲むことで、ナビゲーションバーが表示され、画面遷移が可能になります。
struct ContentView: View {
var body: some View {
NavigationStack {
Text("ホーム画面")
.navigationTitle("ホーム")
}
}
}navigationTitle でナビゲーションバーのタイトルを設定します。
NavigationLink で画面遷移
NavigationLink をタップすると、指定した遷移先に移動します。
struct ContentView: View {
var body: some View {
NavigationStack {
List {
NavigationLink("設定") {
SettingsView()
}
NavigationLink("プロフィール") {
ProfileView()
}
}
.navigationTitle("メニュー")
}
}
}
struct SettingsView: View {
var body: some View {
Text("設定画面")
.navigationTitle("設定")
}
}
struct ProfileView: View {
var body: some View {
Text("プロフィール画面")
.navigationTitle("プロフィール")
}
}遷移先のビューでも navigationTitle を設定すると、自動的にタイトルと戻るボタンが表示されます。
NavigationLink のラベルをカスタマイズ
NavigationLink のラベルには任意のビューを指定できます。
NavigationLink {
DetailView()
} label: {
HStack {
Image(systemName: "star.fill")
.foregroundColor(.yellow)
Text("お気に入り")
Spacer()
Text("3件")
.foregroundColor(.gray)
}
}List との組み合わせ
NavigationStack と List を組み合わせることで、マスター・ディテール形式の UI を構築できます。
struct Item: Identifiable {
let id = UUID()
var name: String
}
struct ContentView: View {
let items = [
Item(name: "りんご"),
Item(name: "みかん"),
Item(name: "バナナ")
]
var body: some View {
NavigationStack {
List(items) { item in
NavigationLink(item.name) {
Text("\(item.name)の詳細")
.navigationTitle(item.name)
}
}
.navigationTitle("フルーツ")
}
}
}NavigationStack
ナビゲーション全体を管理するコンテナ。最上位に1つだけ配置する。
NavigationLink
タップで画面遷移を行うコンポーネント。遷移先のビューを指定する。
navigationTitle
ナビゲーションバーに表示するタイトルを設定する。各画面で指定する。
NavigationStack は SwiftUI アプリの基本的な構造となるコンポーネントです。次の記事では NavigationLink の詳細な使い方を解説します。