我创建了 macOS 项目,并尝试使 UIViewRepresentable 成为可能,但出现此错误。
import SwiftUI
struct WebView: UIViewRepresentable { //Error: Use of undeclared type 'UIViewRepresentable'
}
Run Code Online (Sandbox Code Playgroud)
我可以用它做什么,或者如何为 macOS 制作自己的 UIViewRepresentable 以在我的项目中使用 WKWebView?
struct WebView: UIViewRepresentable {
func makeUIView(context: Context) -> WKWebView {
WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
}
}
Run Code Online (Sandbox Code Playgroud)
您可以实现以下代码。然后Xcode将帮助您为相应的目标实现正确的协议:
#if os(macOS)
public typealias ViewRepresentable = NSViewRepresentable
#elseif os(iOS)
public typealias ViewRepresentable = UIViewRepresentable
#endif
Run Code Online (Sandbox Code Playgroud)
此外,您可以在一个结构中同时拥有两种实现,例如:
struct WebView: ViewRepresentable {
func makeNSView(context: Context) -> WKWebView { WKWebView() }
func makeUIView(context: Context) -> WKWebView { WKWebView() }
func updateNSView(_ nsView: WKWebView, context: Context) { }
func updateUIView(_ nsView: WKWebView, context: Context) { }
}
Run Code Online (Sandbox Code Playgroud)
如果您想要一个在两个平台上都能工作的简单实现,请查看此要点:
import WebKit
struct WebView: ViewRepresentableHelper {
var configuration = { (view: WKWebView) in }
}
Run Code Online (Sandbox Code Playgroud)
var body: some View {
WebView {
$0.load(request)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2768 次 |
| 最近记录: |