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)
}
}
}
今天我遇到了一个问题,这对我来说似乎是一个错误,当我点击 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)
}
}
}