3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【SwiftUI】NavigationViewの基本的な使い方(後編)

Posted at

前編に引き続きNavigationViewの解説をしていきます。

前回はこちら↓

navigationTitleモディファイア

NavigationViewにタイトルをつけることができるモディファイア。

公式リファレンス↓

実際の動作

  • navigationTitleをつけない場合
    スクリーンショット 2021-02-27 19.09.24.png

  • navigationTitleをつけた場合
    スクリーンショット 2021-02-27 19.09.55.png

一つ目と二つ目のソースコードの差は__navigationTitleをつけたかどうか__だけです。
実際のソースコードを見てみましょう。

ソースコード

ContentView.swift
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には次のような機能もあります。

「もどる」ボタンの名前になる

最初の画面からどれかリンクをタップしてみます。
スクリーンショット 2021-02-27 19.09.55.png

すると、、、
スクリーンショット 2021-02-27 20.20.50.png

このように、__前の画面にもどるためのボタンの名前__として、navigationTitleがそのまま使われます。

また、画面遷移のときにアニメーションも自動でつけてくれます。(動画参照)

navigationTitleはどこに書く?

よくある間違い(主に私が)として、次のように書くパターンがあります。

ContentView.swift
            NavigationView {
                List(0..<4) { n in
                    NavigationLink(regions[n], destination: Region(id: n, regionName: regions[n]))
                }
//                .navigationTitle("そらをとぶ") //本来はここに書く
            }
            .navigationTitle("そらをとぶ") //NavigationViewの外側に書いている

このように書くと、エラーにはなりませんがタイトルは表示されなくなります。

navigationTitleはそもそも、ひとつの画面のタイトルでしかないため、遷移先には引き継がれません。各画面でnavigationTitleをつけることになります。

よって、__navigationTitleはNavigationViewの内側に書くものだ__と認識すると良いでしょう。

参考文献

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?