@Binding和向下滚动以关闭显示的视图有什么区别?

时间:2019-07-08 15:09:09

标签: swiftui

关闭视图后,NavigationBarItem无法单击!

XCode11 beta3, MacOS Catalina 10.15 Beta(19A501i)

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

Variable x = { 2 4 8 ......}
Variable y = { 3 5 6 ......}

1 个答案:

答案 0 :(得分:0)

我倾向于认为模态存在一个错误。模态消失时,永远不会调用onDismiss。但是,我确实找到了解决方法。我不是通过从模式视图内部设置isPresented变量来关闭,而是使用主窗口中的rootViewController来调用UIKit dismiss方法。

通过这种方式消除模态,将正确调用onDismiss闭包,并且在此处设置isPresented = false,因此可以再次呈现模态。

以下代码可以正常工作,至少要等到新版本解决该问题为止:

import SwiftUI

struct DetailView: View {

    var body: some View {
        Group {
            Text("Detail")
            Button(action: {
                UIApplication.shared.windows[0].rootViewController?.dismiss(animated: true, completion: { })
            }) {
                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()) {
                        self.isPresented = false
                        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)
            )
        }
    }
}