3
votes

Comment insérer une iframe dans SwiftUI View?

Je souhaite charger une webView dans le nouveau framework SwiftUI. Comment puis je faire ça?

struct SubmissionFlowFrame: View {

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


1 commentaires

À moins qu'il ne s'agisse d'une View SwiftUI native (ce que je ne crois pas être), vous devrez (1) le faire fonctionner dans UIKit comme vous le souhaitez (en tant que contrôleur de vue ou de vue) et (2) le rendre "relatable "(comme dans UIViewRelatable ou UIViewControllerRelatable . Il y a quelques questions ici avec des réponses acceptées ainsi que quelques très bons exemples. Bonne chance!


4 Réponses :


0
votes

Eh bien, actuellement, aucune méthode directe n'est disponible pour cela.

mais vous pouvez utiliser UIViewRepresentable pour cela et UIViewRepresentable vue avec.

comme ça:

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

n'oubliez pas d' import WebKit .


0 commentaires

4
votes

Vous pouvez utiliser n'importe quel UIView en vous conformant à UIViewRepresentable et implémenter les méthodes nécessaires comme celle-ci:

import WebKit

puis utilisez-le comme une View swiftUI normale comme ceci:

struct ContentView : View {

    var body: some View {
        WebView()
    }
}

Et n'oubliez pas d'importer les dépendances UIKit comme pour ce cas:

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)
    }
}


0 commentaires

1
votes
import SwiftUI
import WebKit

struct WebView: UIViewRepresentable {

    func makeUIView(context: UIViewRepresentableContext<WebView>) -> WebView.UIViewType {
        WKWebView(frame: .zero)
    }

    func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext<WebView>) {
        let request = URLRequest(url: URL(string: "https://apple.com")!)
        uiView.load(request)
    }

}

struct ContentView: View {

    var body: some View {
        WebView()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

0 commentaires

0
votes

Vous pouvez envelopper le webView dans SwiftUI en utilisant UIViewRepresentable .

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)
  }
}


0 commentaires