直接上代码
import SwiftUI
import WebKit
//不通过参数直接构建视图
struct MyWebView: UIViewRepresentable {
func makeUIView(context: Context) -> WKWebView {
return WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
let url = URL(string: "https://www.baidu.com/")!
uiView.load(URLRequest(url: url))
}
}
//通过【UIViewRepresentable】从WebKit中引入【WKWebView】创建能够在SwiftUI中使用的视图
struct WebView: UIViewRepresentable {
let webView: WKWebView
func makeUIView(context: Context) -> WKWebView{
return webView
}
func updateUIView(_ uiView: WKWebView, context: Context) { }
}
//通过参数构建视图
class WebViewModel: ObservableObject {
let webView: WKWebView
let url: URL
init() {
webView = WKWebView(frame: .zero)
url = URL(string: "https://cn.bing.com/")!
webView.load(URLRequest(url: url))
}
}
struct HowToLoadWebView: View {
@ObservedObject var webViewModel = WebViewModel()
@State var isSwitchView = false
var body: some View {
NavigationView{
Group{
if isSwitchView {
WebView(webView: webViewModel.webView)
} else {
MyWebView()
}
}
.navigationBarItems(trailing: Button(action: {
self.isSwitchView.toggle()
}, label: {
Text("切换")
}))
.navigationBarTitle("", displayMode: .inline)
}
}
}
struct HowToLoadWebView_Previews: PreviewProvider {
static var previews: some View {
HowToLoadWebView()
}
}