SwiftUI 使用 WKWebView UIViewRepresentable 驳回 sheet

SwiftUI dissmiss sheet with WKWebView UIViewRepresentable

今天我遇到了一个问题,这对我来说似乎是一个错误,当我点击 sheet 内的按钮时,我无法关闭 sheet,有趣的是,当我向下滑动模态时解雇,但只有当我想解雇行动时它根本不起作用

iOS 15.4.1 真机和模拟器

我尝试了 \.dismiss\.presentationMode,但没有成功

我的 WebView 可表示结构

import SwiftUI
import WebKit

struct WebView: UIViewRepresentable {
    
    let url: URL?
    
    func makeUIView(context: Context) -> WKWebView {
        let prefs: WKWebpagePreferences = WKWebpagePreferences()
        prefs.allowsContentJavaScript = true
        
        let config: WKWebViewConfiguration = WKWebViewConfiguration()
        config.defaultWebpagePreferences = prefs
        
        return WKWebView(frame: .zero, configuration: config)
    }
    
    func updateUIView(_ uiView: WKWebView, context: Context) {
        guard let myURL = url else {
            return
        }
        let request = URLRequest(url: myURL)
        uiView.load(request)
    }
}

sheet修饰符在这里

.sheet(isPresented: $showWebViewSheet) {
                ZStack {
                    // webview
                    WebView(url: URL(string: webViewURL))
                    
                    // dissmiss
                    Button(action: {
                        dismiss()
                    }) {
                        Image(systemName: "xmark")
                            .padding(10)
                            .background(Color.gray.opacity(0.5))
                            .cornerRadius(20)
                            .padding(30)
                    }
                }
            }

带有 dismiss() 的按钮将不起作用。试试这个代码实现:

.sheet(isPresented: $showWebViewSheet) {
                ZStack {
                    // webview
                    WebView(url: URL(string: webViewURL))
                    
                    // dissmiss
                    Button(action: {
                        showWebViewSheet = false
                    }) {
                        Image(systemName: "xmark")
                            .padding(10)
                            .background(Color.gray.opacity(0.5))
                            .cornerRadius(20)
                            .padding(30)
                    }
                }
            }