SwiftUI NavigationView,如果 NavigationLink 位于 NavigationBarItem 内,则返回 [英] SwiftUI NavigationView, going back if NavigationLink is inside a NavigationBarItem

查看:33
本文介绍了SwiftUI NavigationView,如果 NavigationLink 位于 NavigationBarItem 内,则返回的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于 iOS 13.4 和 Xcode 11.4 存在一些问题,presentationMode.wrappedValue.dismiss() 我正在寻找一种替代方法以编程方式返回.我从 MScottWaller 找到了这个解决方案:

As there are some problems with iOS 13.4 and Xcode 11.4 with presentationMode.wrappedValue.dismiss() I am looking for an alternative approach to go back programmatically. I found this solution from MScottWaller:

iOS SwiftUI:以编程方式弹出或关闭视图

不幸的是,就我而言,它不起作用:

Unfortunately, in my case it does not work:

struct MasterView: View {
    @State private var showDetail = false

    var body: some View {
        VStack {
            Text("MasterView")
            .navigationBarItems(trailing: HStack {
                NavigationLink(destination: DetailView(showSelf: $showDetail), isActive: $showDetail) {
                    Image(systemName: "tag")
                        .padding(.leading, 4)
                }
            })
        }
    }
}

struct DetailView: View {
    @Binding var showSelf: Bool

    var body: some View {
        Button(action: {
            self.showSelf = false
        }) {
            Text("Pop")
        }
    }
}

如果 NavigationLink 在导航栏项内,我将无法从我的 DetailView 返回.我不知道是 bug 还是其他原因导致 NavigationLink 在 navigationBarItem 中无法以相同方式工作.

If the NavigationLink is inside a navigationBarItem, I can't go back from my DetailView. I don't know if it is a bug or there are other reasons why NavigationLink does not work in the same way inside a navigationBarItem.

作为一种解决方法,我使用此变体在视图中带有一个空的 NavigationLink.它有效,但我不喜欢这样:

As a workaround I use this variant with a empty NavigationLink inside the view. It works, but I don't like this:

struct MasterView: View {
    @State private var showDetail = false

    var body: some View {
        VStack {
            Text("MasterView")
            NavigationLink(destination: DetailView(showSelf: $showDetail), isActive: $showDetail) {
                EmptyView()
            }
            .navigationBarItems(trailing: HStack {
                Button(action: { self.showDetail.toggle() }) {
                    Image(systemName: "tag")
                        .padding(.leading, 4)
                }
            })
        }
    }
}

有什么想法为什么 NavigationLink 不能在导航栏项内正确工作吗?

Any ideas why the NavigationLink does not correct work inside a navigationBarItem?

推荐答案

这是一个 iOS 错误.

It's an iOS bug.

https://forums.developer.apple.com/thread/125937

解决方法是切换隐藏在导航栏外的 NavigationLink:

The work around is to toggle a NavigationLink hidden outside of nav bar:

 struct Parent: View {  

    @State private var showingChildView = false  

    var body: some View {  
        NavigationView {  
            VStack {  
                Text("Hello World")  
                NavigationLink(destination: Child(),  
                               isActive: self.$showingChildView)  
                { Text("HiddenLink").hidden() }
            }  
            .navigationBarItems(trailing: Button(action:{ self.showingChildView = true }) { Text("Next") })  
        }  
    }  
}  

这篇关于SwiftUI NavigationView,如果 NavigationLink 位于 NavigationBarItem 内,则返回的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆