SwiftUI消除了NavigationView(Xcode Beta 5)中显示的模式表

Sko*_*ota 2 swiftui

我试图消除通过.sheetSwiftUI中呈现的模式视图-由Button,在NavigationViews 内由a调用,navigationBarItems如下所示:

struct ModalView : View {

    @Environment(\.presentationMode) var presentationMode  

    var body: some View {       
        Button(action: {
            self.presentationMode.value.dismiss()
        }, label: { Text("Save")})
    }   

}

struct ContentView : View {

    @State var showModal: Bool = false

    var body: some View {
         NavigationView { 
           Text("test")
           .navigationBarTitle(Text("Navigation Title Text"))
           .navigationBarItems(trailing:
               Button(action: {
                   self.showModal = true
               }, label: { Text("Add") })
                   .sheet(isPresented: $showModal, content: { ModalView() })
           )
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

轻击“保存”按钮时,模态不会消失,它只会保留在屏幕上。摆脱它的唯一方法是向下滑动模态。

打印self.presentationMode.value始终显示的值,false因此似乎认为没有显示它。

仅当从中显示时才会发生这种情况NavigationView。拿出来,它工作正常。

我在这里缺少什么吗,或者这是Beta版问题?

Vla*_*ego 5

您需要将.sheet按钮移到外面。

NavigationView {
  Text("test")
  .navigationBarTitle(Text("Navigation Title Text"))
  .navigationBarItems(trailing:
     Button("Add") {
       self.showModal = true
     }
  )
  .sheet(isPresented: $showModal, content: { ModalView() })
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以将其移动到NavigationView封闭之外。

NavigationView {
  Text("test")
  .navigationBarTitle(Text("Navigation Title Text"))
  .navigationBarItems(trailing:
     Button("Add") { self.showModal = true }
  )
}
.sheet(isPresented: $showModal, content: { ModalView() })

Run Code Online (Sandbox Code Playgroud)

请注意,如果您有一个简单的文本按钮,也可以简化Button调用。

  • 可能是由于某种原因导致导航栏内的Button与视图内的Button有所不同的错误;或者,或者把navigationBar放在了NavigationView的外部,这是它的兄弟。我现在无法想到任何其他原因。 (2认同)