Post

Replies

Boosts

Views

Activity

`TabView` and `tabViewStyle(.page)` not navigating as expected
I've been experimenting with TabView and tabViewStyle and I've run into a problem with my code I can't figure out. In the code below, when the app opens up on my device I start on the HomeScreen() (as expected) but if I tap on Profile in the top bar, the tab navigation doesn't happen. The Profile text turns red (indicating that pageIndex has been updated), but for reasons I can't figure out, the TabView isn't updating accordingly. BUT, if I open the app and tap on Settings in the top bar, the tab navigation happens as expected. Swiping works as expected, no issues there. Have I missed something obvious? import SwiftUI struct SwipeNavigation2: View { @State var pageIndex = 1 var body: some View { NavigationView { TabView(selection: self.$pageIndex) { // The screen to the "left" of the Home screen ProfileScreen() .tag(0) // The screen we want the app to load on HomeScreen() .tag(1) // The screen to the "right" of the Home screen SettingsScreen() .tag(2) } .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never)) .navigationTitle("") .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .navigationBarLeading) { Button { withAnimation(.spring()) { pageIndex = 0 } } label: { Text("Profile") .foregroundColor(pageIndex == 0 ? .red : .primary) } } ToolbarItem(placement: .navigationBarTrailing) { Button { withAnimation(.spring()) { pageIndex = 2 } } label: { Text("Settings") .foregroundColor(pageIndex == 2 ? .red : .primary) } } } } } } private struct ProfileScreen: View { var body: some View { Text("Profile screen") } } private struct HomeScreen: View { var body: some View { Text("Home screen") } } private struct SettingsScreen: View { var body: some View { Text("Settings screen") } }
1
1
821
Jan ’23