移除列表行后,SwiftUI .popover关闭将无法工作

问题描述

我有一个SwiftUI列表,其中包含一个拇指行。单击时,此拇指会打开一个带有较大版本图片的弹出窗口。

我面临的问题是,当从列表中删除其弹出框处于打开状态的行时,该弹出框将保持打开状态,并且无法关闭它,最终导致UI无法使用。

我的目标是当从列表中删除该行时自动关闭弹出窗口。

以下是该行主体的剥离版本。我使用Button是因为它比onTapGesture事件更可靠。

@State private var showPopover: Bool = false

var body: some View {

    Button(action: { self.showPopover = true }) {
        Image(systemName: "photo")
            .ondisappear { self.showPopover = false}
    }
    
    .popover(isPresented: $showPopover,arrowEdge: .leading) {
        Image(systemName: "photo")
    }
}

解决方法

您使用此:

要关闭,请向下滑动或点击“后退”按钮! (我保证它会被解雇)100%

    import SwiftUI

struct ContentView: View {
    
    
    @State private var showModalView: Bool = false
    
    var body: some View {
        
        VStack
        {
            Button("showModalView") {showModalView.toggle()}
        }
        .sheet(isPresented: $showModalView,content: {
            
            ZStack
            {
                Color.red
                    .ignoresSafeArea()
                
                Button("← Back"){showModalView.toggle()}.foregroundColor(Color.black)
            }
        })
        
        
        
    }
    
}