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
ViewSwiftUI native (ce que je ne crois pas être), vous devrez (1) le faire fonctionner dansUIKitcomme vous le souhaitez (en tant que contrôleur de vue ou de vue) et (2) le rendre "relatable "(comme dansUIViewRelatableouUIViewControllerRelatable. Il y a quelques questions ici avec des réponses acceptées ainsi que quelques très bons exemples. Bonne chance!