今回は 【SwiftUI】NavigationViewの使い方とタイトルのカスタマイズ の続きで、NavigationBarにボタンを設置したり、スタイルの変更をしていきましょう。
環境
- Xcode12.5.1
- iOS14.6
- スクショはiPhone12Pro Maxで撮影
前回の実装
前回の実装ではNavigationLink
による画面遷移と、.navigationTitle()
によるタイトルの設定について説明しました。コードは以下になります。
struct ContentView: View {
var body: some View {
NavigationView {
List(1..<20) { index in
NavigationLink(destination: NextView(index: index)) {
Text("\(index)番目")
}
}
.navigationTitle("Top View")
}
}
}

それではこのコードを使って、NavigationBarにボタンを設置する方法を説明していきます。
ボタンの設置
ボタンを設置するには、.navigationBarItems(leading: ,trailing:)
を使用します。
leading:
には左側に表示したいView、trailing:
には右側に表示したいViewを渡してやります。
struct ContentView: View {
var body: some View {
NavigationView {
List(1..<20) { index in
NavigationLink(destination: NextView(index: index)) {
Text("\(index)番目")
}
}
.navigationTitle("Top View")
.navigationBarItems(leading:
Button(action: {}) {
Image(systemName: "magnifyingglass")
},
trailing:
Button(action: {}) {
Image(systemName: "trash")
}
)
}
}
}

こんな感じでボタンが表示されました。
leading:
とtrailing:
にはViewを設定できるので、HStackなどを使えば複数のボタンを置くこともできます。
スタイルの設定
Navigationのスタイルの指定は、.navigationViewStyle()
で行うことができます。
※このモディファイアはNavigationViewに直接設定してください。
struct ContentView: View {
var body: some View {
NavigationView {
List(1..<20) { index in
NavigationLink(destination: NextView(index: index)) {
Text("\(index)番目")
}
}
.navigationTitle("Top View")
.navigationBarItems(leading:
Button(action: {}) {
Image(systemName: "magnifyingglass")
},
trailing:
Button(action: {}) {
Image(systemName: "trash")
}
)
}
.navigationViewStyle(DefaultNavigationViewStyle())
}
}
設定できる引数は以下の3種類があります。(iOS15からはもう一つ増えます。)
DefaultNavigationViewStyle()

DoubleColumnNavigationViewStyle()

StackNavigationViewStyle()

デフォルトだとDoubleColumn
の見た目になるようですね。
コメント