SwitUI Truble Shooting 2:ナビゲーション後TabBarが消えない


📌 ケース
SWIFTUIでは、画面間の移動はNavigationViewとNavigationLinkで行われる.スクリーン、すなわち、各ビューはpush/popで組織されています.
一方、最下位層は最もよく知られている最も一般的なアプリケーションフロー構成方式であり、TabViewによってSwitUIで実現される.
NavigationViewとTabViewでアプリケーションフレームワークを構築する過程で、NavigationLinkで次の画面に入ると、次の欄は消えずに残り続ける現象が発見されました.
💻 ソリューション
想像以上に時間がかかりましたが、Hierarchyを知ってからは思ったより解決が簡単でした.
元のコードはこのように書かれています.
struct ContentView: View {

    var body: some View {
    
        TabView(selection: $tabSelection) {
        
            NavigationView { 
                NavigationLink(destination: NavigatedView()) {
                    VStack {
                        Text("Navigate")
                    }
                    .navigationBarTitle("Tab1")
                }
                
            } // NavigationView
            .tabItem { Text("Tab 1") }
            .tag(Tabs.tab1)
            
            .
            .
            .
            
        } // TabView
        
    } // View
            
現在の階層構造はこうである.

しかし、私(実際、デザイナー)が望んでいる構造は以下の通りです.

実際、市場に出回っている多くのアプリケーションがこのソフトウェアを採用しているのは、ユーザーがこのソフトウェアをもっと好きだからかもしれません.
TabView上にNavigationViewが作成され、NavigationView内でNavigationLinkでスキップした画面もTabView上に作成されます.そのため、TabBarを残すしかない.
したがって、コードは次のように変更されます.
struct ContentView: View {

    var body: some View {
    
    	NavigationView {
        
            TabView(selection: $tabSelection) {
            
                    NavigationLink(destination: NavigatedView()) {
                        VStack {
                            Text("Navigate")
                        }
                        .navigationBarTitle("Tab1")
                    } // NavigationLink
                    .tabItem { Text("Tab 1") }
            		.tag(Tabs.tab1)
                    
                .
                .
                .
                
            } // TabView
            
        } // NavigationView
        
    } // View
            

画面が移動すると、下部のバーが消えやすいのが見えます.
📌 ポスト
言語の勉強を始めたばかりで、言語の文法や構造がよく分からないので、例題コードを見てから勉強することがよくあります.
今回の故障シュートも、事実上、当たり前だと思っていたら、TabViewとNavigationViewがどのように構築されているのか理解していなければ、このような構造を把握できないだけでなく、NavigationLink内でNavigationViewを宣言し、不要なナビゲーションバーを作成することもできます(恥ずかしいですが、これは私の物語です).
SWIFTUIは思ったより面白かったです
1年半くらい使ったフラッシュと差が少ないせいか.早くこの怠惰を克服してFlutterが感じていることも整理しておきましょう
printf("Thank You!\n");
printf("Posted by Thirsty Developer\n");