Webview 如何在SwiftUI视图中插入iframe?

Webview 如何在SwiftUI视图中插入iframe?,webview,uiwebview,webkit,swiftui,Webview,Uiwebview,Webkit,Swiftui,我想在新的SwiftUI框架中加载一个webView。我该怎么做 struct SubmissionFlowFrame: View { var body: some View { // I want to insert the iframe here } } 目前还没有直接的方法 但是,您可以使用UIViewRepresentable来实现这一点,并使用它包装视图 像这样: struct ContentView : UIViewRepresentable {

我想在新的SwiftUI框架中加载一个
webView
。我该怎么做

struct SubmissionFlowFrame: View {

    var body: some View {
        // I want to insert the iframe here
    }
}

目前还没有直接的方法

但是,您可以使用
UIViewRepresentable
来实现这一点,并使用它包装视图

像这样:

struct ContentView : UIViewRepresentable {

    func makeUIView(context: Context) -> WKWebView  {
        let webView = WKWebView()
        let request = URLRequest(url: URL(string: "https://www.apple.com")!)
        webView.load(request)
        return webView
    }

    func updateUIView(_ uiView: WKWebView, context: Context) { }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif
struct WebView: UIViewRepresentable {

    func makeUIView(context: Context) -> WKWebView {
        WKWebView(frame: .zero)
    }

    func updateUIView(_ view: WKWebView, context: UIViewRepresentableContext<WebView>) {

        let request = URLRequest(url: URL(string: "https://google.com")!)

        view.load(request)
    }
}
struct ContentView : View {

    var body: some View {
        WebView()
    }
}

不要忘记导入WebKit

您可以使用任何
UIView
,方法是遵循
UIViewRepresentable
,并实现如下所需的方法:

struct ContentView : UIViewRepresentable {

    func makeUIView(context: Context) -> WKWebView  {
        let webView = WKWebView()
        let request = URLRequest(url: URL(string: "https://www.apple.com")!)
        webView.load(request)
        return webView
    }

    func updateUIView(_ uiView: WKWebView, context: Context) { }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif
struct WebView: UIViewRepresentable {

    func makeUIView(context: Context) -> WKWebView {
        WKWebView(frame: .zero)
    }

    func updateUIView(_ view: WKWebView, context: UIViewRepresentableContext<WebView>) {

        let request = URLRequest(url: URL(string: "https://google.com")!)

        view.load(request)
    }
}
struct ContentView : View {

    var body: some View {
        WebView()
    }
}
不要忘记导入
UIKit
依赖项,如本例所示:

import WebKit
导入快捷界面
导入WebKit
结构WebView:UIViewRepresentable{
func makeUIView(上下文:UIViewRepresentableContext)->WebView.UIViewType{
WKWebView(帧:.0)
}
func updateUIView(uiView:WKWebView,context:UIViewRepresentableContext){
let request=URLRequest(url:url(字符串):https://apple.com")!)
uiView.load(请求)
}
}
结构ContentView:View{
var body:一些观点{
WebView()
}
}
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
ContentView()
}
}

您可以使用
UIViewRepresentable
webView
包装在SwiftUI中

import SwiftUI
import WebKit

struct ContentView: View {
  var body: some View {
    WebView()
  }
}

struct WebView: UIViewRepresentable {
  func makeUIView(context: Context) -> WKWebView {
    return WKWebView()
  }
  func updateUIView(_ webView: WKWebView, context: Context) {
        let request = URLRequest(url: URL(string: "https://www.apple.com")!)
        webView.load(request)
  }
}

使用
WebView
加载url请求,如:

WebView {
    $0.load(URLRequest(url: .init(string: "https://google.com")!))
}

使用这个简单的结构

导入WebKit
结构WebView:ViewRepresentableHelper{

var configuration={(view:WKWebView)in}//除非它是本机SwiftUI
视图
(我不相信它是),否则您需要(1)让它在
UIKit
中工作(作为视图或视图控制器),并(2)使它“可关联”(如
UIViewRelatable
uiviewcontrollerrelateable
中所述。这里有一些问题和公认的答案,还有一些非常好的例子。祝你好运!