Skip to content

Instantly share code, notes, and snippets.

@xgqfrms
Created October 27, 2020 17:43
Show Gist options
  • Save xgqfrms/71a6f7471b79905fb53147b23805d382 to your computer and use it in GitHub Desktop.
Save xgqfrms/71a6f7471b79905fb53147b23805d382 to your computer and use it in GitHub Desktop.
SwiftUI & WKWebView
//
// SwiftUI_WKWebView.swift
// webview-app
//
// Created by 夏凌晨 on 2020/10/28.
// Copyright © 2020 webgeeker. All rights reserved.
//
import SwiftUI
//import Foundation
import WebKit
struct SwiftUI_WKWebView: UIViewRepresentable {
var url: String;
func makeUIView(context: Context) -> WKWebView {
guard let url = URL(string: self.url) else {
return WKWebView();
}
let request = URLRequest(url: url);
let webview = WKWebView();
webview.load(request);
return webview;
}
func updateUIView(_ uiView: WKWebView, context: Context) {
//
}
}
@xgqfrms
Copy link
Author

xgqfrms commented Oct 27, 2020

UIViewRepresentable

makeUIView & updateUIView

UIViewRepresentable 协议具有两个需要添加的要求:

创建 ???View 的 makeUIView(context:)方法

配置视图并响应所有更改的 updateUIView(_:context :)方法。

//
//  MapView.swift
//  Landmarks
//
//  Created by 夏凌晨 on 2020/10/28.
//  Copyright © 2020 webgeeker. All rights reserved.
//

import SwiftUI
import MapKit

struct MapView: UIViewRepresentable {
//  var body: some View {
//    Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
//  }
  func makeUIView(context: Context) -> MKMapView {
    MKMapView(frame: .zero)
  }
  func updateUIView(_ uiView: MKMapView, context: Context) {
    let coordinate = CLLocationCoordinate2D(latitude: 34.011286, longitude: -116.166868)
    let span = MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 2.0)
    let region = MKCoordinateRegion(center: coordinate, span: span)
    uiView.setRegion(region, animated: true)
  }
}

struct MapView_Previews: PreviewProvider {
  static var previews: some View {
    MapView()
  }
}


/*

UIViewRepresentable 协议具有两个需要添加的要求:
创建 MKMapView的 makeUIView(context:)方法
和配置视图并响应所有更改的 updateUIView(_:context :)方法。

*/

@xgqfrms
Copy link
Author

xgqfrms commented Oct 27, 2020

//
//  SwiftUI_WKWebView.swift
//  webview-app
//
//  Created by 夏凌晨 on 2020/10/28.
//  Copyright © 2020 webgeeker. All rights reserved.
//

import SwiftUI
//import Foundation
import WebKit

struct SwiftUI_WKWebView: UIViewRepresentable {
  var url: String
  func makeUIView(context: Context) -> WKWebView {
    guard let url = URL(string: self.url) else {
      return WKWebView()
    }
    let request = URLRequest(url: url)
    let webview = WKWebView()
    webview.load(request)
    return webview
  }
  func updateUIView(_ uiView: WKWebView, context: Context) {
    //
  }
}


// Previews 入口 ✅
struct SwiftUI_WKWebView_Previews: PreviewProvider {
  static var previews: some View {
    // 👍 联网的 URL, Canvas 必须开启 live preview, 动态的请求内容
    SwiftUI_WKWebView(url: "https://cdn.xgqfrms.xyz")
      .edgesIgnoringSafeArea(Edge.Set.top)
  }
}


/*

// SwiftUI_WKWebView(url: "https://cdn.xgqfrms.xyz");
❌ no need ;
CompileDylibError: Failed to build ContentView.swift
Compiling failed: ';' statements are not allowed

*/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment