SwiftUI NavigationLink自动弹出

SwiftUI NavigationLink自动弹出,swiftui,swiftui-navigationlink,Swiftui,Swiftui Navigationlink,我有一个简单的用例,其中一个屏幕使用NavigationLink推送另一个屏幕。iOS 14.5 beta版(1、2、3)有一种奇怪的行为,按下屏幕后会弹出按下的屏幕 我设法创建了一个示例应用程序,并在其中复制了它。我认为原因在于@Environment(\.presentationMode)的存在,它似乎重新创建了视图,并导致弹出推送视图 完全相同的cod在Xcode 12/ios14.4中运行良好 下面是一个示例代码 import SwiftUI public struct FirstS

我有一个简单的用例,其中一个屏幕使用
NavigationLink
推送另一个屏幕。iOS 14.5 beta版(1、2、3)有一种奇怪的行为,按下屏幕后会弹出按下的屏幕

我设法创建了一个示例应用程序,并在其中复制了它。我认为原因在于
@Environment(\.presentationMode)
的存在,它似乎重新创建了视图,并导致弹出推送视图

完全相同的cod在Xcode 12/ios14.4中运行良好

下面是一个示例代码

import SwiftUI

public struct FirstScreen: View {
    public init() {}
    public var body: some View {
        NavigationView {
            List {
                row
                row
                row
            }
        }
    }
    private var row: some View {
        NavigationLink(destination: SecondScreen()) {
            Text("Row")
        }
    }
}

struct SecondScreen: View {

    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    public var body: some View {
        VStack(spacing: 10) {
            NavigationLink(destination: thirdScreenA) {
                Text("Link to Third Screen A")
            }

            NavigationLink(destination: thirdScreenB) {
                Text("Link to Third Screen B")
            }

            Button("Go back", action: { presentationMode.wrappedValue.dismiss() })
        }

    }

    var thirdScreenA: some View {
        Text("thirdScreenA")
    }

    var thirdScreenB: some View {
        Text("thirdScreenB")
    }
}


struct FirstScreen_Previews: PreviewProvider {
    static var previews: some View {
        FirstScreen()
    }
}
导入快捷界面
公共结构FirstScreen:视图{
公共init(){}
公共机构:一些看法{
导航视图{
名单{
一行
一行
一行
}
}
}
私有变量行:一些视图{
导航链接(目标:SecondScreen()){
文本(“行”)
}
}
}
结构第二屏幕:视图{
@环境(\.presentationMode)变量presentationMode:绑定
公共机构:一些看法{
VStack(间距:10){
导航链接(目的地:第三屏幕){
文本(“链接到第三屏幕A”)
}
导航链接(目的地:第三屏幕){
文本(“链接到第三屏幕B”)
}
按钮(“返回”,操作:{presentationMode.wrappedValue.dismise()})
}
}
第三信条:一些观点{
文本(“第三信条”)
}
var thirdScreenB:一些观点{
文本(“第三信条”)
}
}
结构FirstScreen\u预览:PreviewProvider{
静态var预览:一些视图{
第一屏()
}
}

当正好有2个导航链接时,看起来像个bug。 如果添加另一个空链接,它将消失:

NavigationLink(destination: EmptyView(), label: {})

更多详细信息:

哦,哇,太感谢了,我开始恐慌:)空的导航链接应该去哪里?我也有同样的问题(虽然我有超过2个链接),添加空链接只会修复第一个链接,但所有其他链接仍然存在popping@coopersita我在苹果开发者论坛上看到了你的评论。看来你们面临着不同的问题。如果DetailView更新了MasterView上ForEach列表中使用的数据,并导致Master重新渲染,则可能会导致弹出子视图层次结构。请提交另一个更详细的问题