1 year ago

#372622

test-img

Simon Henn

SwiftUI: Problems with List inside TabViews inside NavigationView

I want to place a TabView inside a NavigationView with different titles depending on the selected tab. Inside those tabs I want to place a List view. See the code below:

 struct ContentView: View {
 @State private var selection = 1
 
 var body: some View {
     TabView(selection:$selection) {
         Page_1()
             .tabItem {
                 Image(systemName: "book")
                 Text("Page 1")
             }
             .tag(1)
         
         Page_2()
             .tabItem {
                 Image(systemName: "calendar")
                 Text("Page 2")
             }
             .tag(2)  
     }
   }
 }


 struct Page_1: View {
    @State var selectedTab = "1"
 
    var body: some View {
        NavigationView {
            TabView(selection: $selectedTab) {
                List {
                    ForEach(0..<20){i in
                        Text("Test")
                    }
                }
                .tag("1")
                .navigationBarTitle("Page 1 Tab 1")
             
                List {
                    ForEach(0..<20){i in
                        Text("Test")
                    }
                }
                .tag("2")
                .navigationBarTitle("Page 1 Tab 2")
            }
            .tabViewStyle(.page(indexDisplayMode: .never))
            .ignoresSafeArea(.all)
            .background()
        }
     }
 }


 struct Page_2: View {
    @State var selectedTab = "1"

    var body: some View {
       NavigationView {
        
          TabView(selection: $selectedTab) {
              List {
                ForEach(0..<20){i in
                    Text("Test")
                }
              }
              .tag("1")
              .navigationBarTitle("Page 2 Tab 1")
            
              List {
                 ForEach(0..<20){i in
                    Text("Test")
                 }
              }
              .tag("2")
              .navigationBarTitle("Page 2 Tab 2")
          }
          .tabViewStyle(.page)
          .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
          .ignoresSafeArea()
          .background()  
      }   
    }
 }

The problem is that when the Pages first appear the lists inside their TabViews seem to be placed slightly too low and then move up. You can see this especially when you switch tabs like here:

enter image description here

After switching back and forth between the tabs they are placed correctly until I freshly start the app again. Would really appreciate your help!:)

Edit

As suggested I tried to put the NavigationViews inside the TabView. That solves the problem with the wrong positioning. However, it leads to the views not being shown at all before I switch back and forth between them. You can see what that looks like in the picture below:

enter image description here

swift

xcode

swiftui

navigationview

tabview

0 Answers

Your Answer

Accepted video resources