Ios SwiftUI-在包含.toolbar的最小项目中显示.sheet时崩溃

Ios SwiftUI-在包含.toolbar的最小项目中显示.sheet时崩溃,ios,swift,swiftui,Ios,Swift,Swiftui,我在特定条件下展示工作表时遇到了一个奇怪的崩溃。我能够在一个启动项目中复制它,并且得到了多人的确认,它在他们的端也崩溃了。奇怪的是,对于一些模拟器/用户来说,这些步骤不会使应用程序崩溃 我已经向苹果公司(FB9064549)提交了一份Bug报告,但我想我也应该在这里问一下 再现碰撞的步骤如下所示: 单击“打开详细视图”按钮 回去 再次单击“打开详细视图”按钮 单击“当前模式” 它会崩溃的 基本内容视图有一个工具栏,其中有一个菜单(或只是一个普通文本)和一个导航链接,用于推送到新页面。如果我注释掉

我在特定条件下展示工作表时遇到了一个奇怪的崩溃。我能够在一个启动项目中复制它,并且得到了多人的确认,它在他们的端也崩溃了。奇怪的是,对于一些模拟器/用户来说,这些步骤不会使应用程序崩溃

我已经向苹果公司(FB9064549)提交了一份Bug报告,但我想我也应该在这里问一下

再现碰撞的步骤如下所示:

  • 单击“打开详细视图”按钮
  • 回去
  • 再次单击“打开详细视图”按钮
  • 单击“当前模式”
  • 它会崩溃的
  • 基本内容视图有一个工具栏,其中有一个菜单(或只是一个普通文本)和一个导航链接,用于推送到新页面。如果我注释掉.toolbar,则不会发生崩溃

    struct ContentView: View {
        var body: some View {
            NavigationView {
                VStack {
                     NavigationLink(
                         destination: DetailView(),
                         label: {
                             Text("Open Detail View")
                         })
                }
                    
                    // If you comment this out, it does not crash
                    .toolbar {
                        ToolbarItem(placement: .navigationBarTrailing) {
                            Menu {
                                ForEach(1...5, id: \.self) { index in
                                    Button {
                                        print("tap menu item")
                                    } label: {
                                        HStack {
                                            Text("Menu Item \(index)")
                                        }
                                    }
                                }
                            } label: {
                                Text("Filter")
                            }
                        }
                    }
            }
        }
    }
    
    呈现的DetailView可以通过绑定项呈现.sheet。如果我改用全屏,它不会崩溃

    struct DetailView: View {
        @State var modalType: ModalType?
        var body: some View {
            Button(action: {
                modalType = .modalWithTabView
            }, label: {
                Text("Present Modal")
            })
            .sheet(item: $modalType, content: { $0 })
        }
    }
    
    enum ModalType: Identifiable, View {
        case modalWithTabView
    
        var id: String {
            return "modalWithTabView"
        }
    
        var body: some View {
            switch self {
                case .modalWithTabView:
                    ModalWithTabView()
            }
        }
    }
    
    struct ModalWithTabView: View {
        @State var currentStep = 0
        var body: some View {
            TabView(selection: $currentStep) {
                ForEach (0 ..< 10) { index in
                    Text("Page \(index)")
                        .tag(index)
                }
            }
            // If you comment this out, it does not crash
            .tabViewStyle(PageTabViewStyle())
        }
    }
    
    显示的工作表是基本的选项卡式分页。如果我不添加PageTabViewStyle,它不会崩溃

    struct DetailView: View {
        @State var modalType: ModalType?
        var body: some View {
            Button(action: {
                modalType = .modalWithTabView
            }, label: {
                Text("Present Modal")
            })
            .sheet(item: $modalType, content: { $0 })
        }
    }
    
    enum ModalType: Identifiable, View {
        case modalWithTabView
    
        var id: String {
            return "modalWithTabView"
        }
    
        var body: some View {
            switch self {
                case .modalWithTabView:
                    ModalWithTabView()
            }
        }
    }
    
    struct ModalWithTabView: View {
        @State var currentStep = 0
        var body: some View {
            TabView(selection: $currentStep) {
                ForEach (0 ..< 10) { index in
                    Text("Page \(index)")
                        .tag(index)
                }
            }
            // If you comment this out, it does not crash
            .tabViewStyle(PageTabViewStyle())
        }
    }
    
    struct ModalWithTabView:View{
    @状态变量currentStep=0
    var body:一些观点{
    选项卡视图(选择:$currentStep){
    ForEach(0..<10){index in
    文本(“第\(索引)”页)
    .tag(索引)
    }
    }
    //如果您对此进行注释,它不会崩溃
    .tabViewStyle(PageTabViewStyle())
    }
    }
    

    如果有人有任何建议,请告诉我

    我不确定您的UI应该是什么样子,将工具栏添加到导航链接对我来说有点奇怪,可能会将其添加到NavigationView,或者将NavigationLink包装在堆栈上?工具栏需要位于NavigationView内才能工作,作为内容本身的修改器。在本例中,只有一个NavigationLink,这就是为什么它直接位于其上。当我将NavigationLink包装在VStack中时,同样的情况也会发生。为了清楚起见,我更新了我的问题。