Swiftui @Binding和向下滚动关闭显示视图之间有什么不同?

Swiftui @Binding和向下滚动关闭显示视图之间有什么不同?,swiftui,Swiftui,NavigationBarItem无法在关闭视图后单击 XCode11 beta3, MacOS Catalina 10.15 Beta(19A501i) 当单击DetailView按钮以@Binding关闭时, ContentView的navigationBarItem将被禁用(无法单击)! 但向下滚动至“取消”即可(可以单击并在调试预览模式下打印“已单击!”) 我倾向于认为情态动词有一个bug。当模态消失时,不会调用onDismiss。然而,我确实找到了一个解决办法。我使用主窗口中的root

NavigationBarItem无法在关闭视图后单击

XCode11 beta3, MacOS Catalina 10.15 Beta(19A501i)

当单击DetailView按钮以@Binding关闭时, ContentView的navigationBarItem将被禁用(无法单击)! 但向下滚动至“取消”即可(可以单击并在调试预览模式下打印“已单击!”)


我倾向于认为情态动词有一个bug。当模态消失时,不会调用
onDismiss
。然而,我确实找到了一个解决办法。我使用主窗口中的rootViewController调用UIKit dismise方法,而不是通过在模态视图中设置isPresented变量来解除

通过以这种方式取消模态,可以正确地调用onDismiss闭包,在那里我设置isPresented=false,这样模态可以再次显示

至少在新版本修复问题之前,以下代码仍然有效:

导入快捷界面
结构详细视图:视图{
var body:一些观点{
团体{
文本(“细节”)
按钮(操作:{
UIApplication.shared.windows[0].rootViewController?.Disclose(动画:true,完成:{})
}) {
文本(“驳回”)
}
}
}
}
结构ContentView:View{
@状态变量isPresented=false
var body:一些观点{
导航视图{
按钮(操作:{self.isPresented.toggle()}){
文本(“显示”)
}
.演示文稿(!isPresented?无:
模态(DetailView()){
self.isPresented=false
打印(“驳回”)
}
)
.navigationBarTitle(文本(“测试”))
.navigationBarItems(尾部:
按钮(操作:{打印(“单击!”)}){
图像(系统名称:“plus”)
.框架(宽度:44,高度:44)
.foregroundColor(.黑色)
.转弯半径(22)
}
.padding(.training)
)
}
}
}

感谢您的快速响应,解决方案为我展示了一种不同思维的方式:)非常感谢您的回答!我也一直在努力解决这个问题。
struct DetailView: View {
    @Binding var isPresented: Bool
    var body: some View {
        Group {
            Text("Detail")
            Button(action: {
                self.isPresented.toggle()
            }) {
                Text("Dismiss")
            }
        }

    }
}

struct ContentView : View {
    @State var isPresented = false

    var body: some View {
        NavigationView{

            Button(action: {self.isPresented.toggle()}){
                Text("Show")
            }

            .presentation(!isPresented ? nil :
                Modal(DetailView(isPresented: $isPresented)) {
                    print("dismissed")
                }
            )

            .navigationBarTitle(Text("Test"))
            .navigationBarItems(trailing:
                Button(action: {print("Clicked!")} ) {
                    Image(systemName: "plus")
                        .frame(width: 44, height: 44)
                        .foregroundColor(.black)
                        .cornerRadius(22)
                }
                .padding(.trailing)
            )
        }
    }
}