SwiftUI中Toolbar内NavigationLink跳转后dismiss返回根视图如何解决
问题原因
这个异常是因为放在toolbar中的NavigationLink不属于当前Test2视图的导航栈层级,而是直接关联到了最外层的NavigationView,所以从Test3调用dismiss时会直接弹出整个Test2视图,回到根视图Test1。
解决方案
你可以在Test2的视图层级内定义一个隐藏的NavigationLink,用状态变量控制它的激活状态,再在toolbar里加按钮触发这个状态变量即可,修改后的Test2代码如下:
struct Test2: View { @Environment(\.presentationMode) var presentationMode // 控制Test3跳转的状态变量 @State private var showTest3 = false var body: some View { VStack { // 隐藏的NavigationLink,放在当前视图的导航栈层级内 NavigationLink(isActive: $showTest3, destination: Test3.init, label: { EmptyView() }) Button("Return") { self.presentationMode.wrappedValue.dismiss() } .padding() } .navigationBarTitle("Test 2") .toolbar { // Toolbar内只放触发状态的按钮 Button("Test 3") { showTest3 = true } } } }
该方案保证了NavigationLink挂载在Test2的导航栈上,Test3 dismiss时只会弹出自身,回到Test2,完全符合预期。
内容的提问来源于stack exchange,提问作者bridgenbarbu
相关产品推荐
相关产品推荐

