Post

Replies

Boosts

Views

Activity

Reply to SwiftUI can't change navigation bar right item for different segmented control view
I found a way to do the trick , but only for views with two layer hierarchy; if the segment control layout in the 3rd layer subview, it did not work. Here's the two layer subview sample import SwiftUI struct MainView: View {     var body: some View {         NavigationView {             segview()         }     } } struct segview: View {     let seg = ["s1", "s2", "s3"]     @State private var selection = 0     var body: some View {         VStack {             HStack {                 Picker("", selection: $selection) {                     ForEach ( 0 ..< seg.count ) { index in                         Text(seg[index])                     }                 } .pickerStyle(SegmentedPickerStyle())             }             switch selection {                 case 0 : s1view()                 case 1: s2view()                 case 2: s3view()                 default: s1view()             }             Spacer()         } .navigationBarItems(trailing: rightView(selection: selection))        &#9;&#9;.navigationTitle("title")           .navigationBarTitleDisplayMode(.inline)     } } struct rightView:View {     var selection:Int     var body: some View {         switch selection {         case 0: Button("Add", action: {})         case 1: Image(systemName: "car")         default: Button("Default") {         }         }     } } BUT, if the segview is embedded in tabview, like the following, the tricks won't work, it seems the .navigationBarItems modifier can only effect on the first subview of NavigationView, any subview deeper then the first subview, can't use the modifier import SwiftUI struct MainView: View {     var body: some View {         NavigationView {             MyTabview()         }     } } struct MyTabview: View {     var body: some View {         TabView  {             segview().tabItem {                 Text("tab1")             } // navigationBarItems can not work on this subview layer             Text("tab2 view").tabItem {                 Text("tab2")             }         } .navigationTitle("Title") // navigationBarItems can work on this subview layer    &#9;&#9; .navigationBarTitleDisplayMode(.inline)     } } Any Suggestion?
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Apr ’21