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 } }
4 Réponses :
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
.
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) } }
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() } }
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) } }
À moins qu'il ne s'agisse d'une
View
SwiftUI native (ce que je ne crois pas être), vous devrez (1) le faire fonctionner dansUIKit
comme vous le souhaitez (en tant que contrôleur de vue ou de vue) et (2) le rendre "relatable "(comme dansUIViewRelatable
ouUIViewControllerRelatable
. Il y a quelques questions ici avec des réponses acceptées ainsi que quelques très bons exemples. Bonne chance!