升级iOS 18与Xcode 16后NavigationLink导航失效问题求助
App顶部有两个标签页(Tab),每个标签页中展示一组卡片,每张卡片都带有NavigationLink用于跳转至详情视图。将Xcode升级至16、iOS升级至18之后,该功能运行异常,NavigationLink无法再进行跳转。移除NavigationStack内部的TabView后,功能恢复正常。该功能在iOS 17.6版本中可正常运行,特此求助。
示例代码:
TabSelectionView.swift
struct TabSelectionView: View { @State var selectedTab: Int = 0 var body: some View { ZStack { TabView(selection: $selectedTab) { ParentView_1() .tabItem { Text("tab1") } .tag(0) ParentView_2() .tabItem { Text("tab2") } .tag(1) } } } }
ParentView_1.swift
struct ParentView_1: View { @EnvironmentObject var environmentValue: ViewModel @State var selectedTab: Int = 0 var body: some View { NavigationStack(path: $environmentValue.navigationPath) { VStack{ Text("Parent 1 ") TabView(selection: $selectedTab) { Child() .tag(0) Child_2() .tag(1) } .tabViewStyle(.page(indexDisplayMode: .never)) } } } }
ParentView_2.swift
struct ParentView_2: View { var body: some View { Text("Hello, World!") } }
Child & Child_2.swift
struct Child: View { let dummyItems: [ItemModel] = [ ItemModel(name: "Home", navigateTo: "HomeView"), ItemModel(name: "Profile", navigateTo: "ProfileView"), ItemModel(name: "Settings", navigateTo: "SettingsView") ] var body: some View { VStack{ Text("Child 1") ScrollView { LazyVStack { ForEach(dummyItems.indices, id: \.self) { index in NavigationLink(value: dummyItems[index]) { RoundedRectangle(cornerRadius: 10) .fill(Color.red.opacity(0.2)) .frame(width: 300, height: 100) .overlay { Text("\(dummyItems[index].name)") } } } } } .navigationDestination(for: ItemModel.self) { navigateValue in if navigateValue.navigateTo == "HomeView" { DetailView(name: navigateValue.name) } else if navigateValue.navigateTo == "ProfileView" { DetailView_2(name: navigateValue.name) } else if navigateValue.navigateTo == "SettingsView" { DetailView_2(name: navigateValue.name) } } } } } struct Child_2: View { let dummyItems: [ItemModel] = [ ItemModel(name: "Home", navigateTo: "HomeView"), ItemModel(name: "Profile", navigateTo: "ProfileView"), ItemModel(name: "Settings", navigateTo: "SettingsView") ] var body: some View { VStack{ Text("Child 2") ScrollView { LazyVStack { ForEach(dummyItems.indices, id: \.self) { index in NavigationLink(value: dummyItems[index]) { RoundedRectangle(cornerRadius: 10) .fill(Color.yellow.opacity(0.5)) .frame(width: 300, height: 100) .overlay { Text("\(dummyItems[index].name)") } } } } .navigationDestination(for: ItemModel.self) { navigateValue in if navigateValue.navigateTo == "HomeView" { DetailView(name: navigateValue.name) } else if navigateValue.navigateTo == "ProfileView" { DetailView_2(name: navigateValue.name) } else if navigateValue.navigateTo == "SettingsView" { DetailView_2(name: navigateValue.name) } } } } } }
DetailViews.swift
struct DetailView: View { var name: String var body: some View { VStack{ Text("detail view \(name)") } } } struct DetailView_2: View { var name: String var body: some View { VStack{ Text("detail 2 view \(name)") } } }
ViewModel.swift
class ViewModel: ObservableObject { @Published var navigationPath = NavigationPath() }
内容的提问来源于stack exchange,提问作者Ranjeet Kumawat
相关产品推荐
相关产品推荐

