iOS:WKWebView Vs UIWebView

我有一个应用程序/项目与部署目标版本 – iOS 10。

我已经使用了UIWebView ,现在已经废弃,并被WKWebView取代。 所以,我想用我的项目中的WKWebViewreplaceUIWebView。

它迫使我使用UIWebView (iOS 10)或将部署目标更改为iOS 11。

我不能改变部署目标,但作为一个中间件解决scheme,我添加了代码(编程)支持。 我的意思是,如果用户的设备操作系统是iOS 11(或以上),那么使用WKWebView否则使用UIWebView (iOS 10或更低版本)。

问题陈述:故事板的视图控制器不支持这两个版本,我的意思是,在故事板中,如果我将View Controller的部署目标设置为iOS 11,那么应用程序在iOS 10中崩溃(并且应该是明显的),如果我将视图控制器的部署目标设置为iOS 10,那么故事板不允许我build立项目。

对于iOS 10, WKWebView显示我这个错误: Xcode 9 GM – WKWebView NSCoding支持在以前的版本中被破坏

问题:如何让故事板(视图控制器)使用iOS 11的WKWebView和iOS 10的UIWebView ? 故事板(视图控制器)中是否有configuration设置或选项,可以让我添加两个接口?

可以通过代码简单地创build和添加一个WKWebView

如果您想要在Storyboard中进行布局,请使用以下方法。

在你的视图控制器添加一个标准的UIView在你的故事板。 这将作为您的Web视图的“持有者”。 将它连接到一个IBOutlet ,然后在viewDidLoad添加一个WKWebView的实例作为该“持有者”视图的子视图。

 class MyViewController: UIViewController, WKNavigationDelegate { // standard UIView, added in Storyboard @IBOutlet weak var webViewHolder: UIView! // instance of WKWebView let wkWebView: WKWebView = { let v = WKWebView() v.translatesAutoresizingMaskIntoConstraints = false return v }() override func viewDidLoad() { super.viewDidLoad() // add the WKWebView to the "holder" UIView webViewHolder.addSubview(wkWebView) // pin to all 4 edges wkWebView.topAnchor.constraint(equalTo: webViewHolder.topAnchor, constant: 0.0).isActive = true wkWebView.bottomAnchor.constraint(equalTo: webViewHolder.bottomAnchor, constant: 0.0).isActive = true wkWebView.leadingAnchor.constraint(equalTo: webViewHolder.leadingAnchor, constant: 0.0).isActive = true wkWebView.trailingAnchor.constraint(equalTo: webViewHolder.trailingAnchor, constant: 0.0).isActive = true // load a URL into the WKWebView if let url = URL(string: "https://google.com") { wkWebView.load(URLRequest(url: url)) } // from here on out, use wkWebView just as if you had added it in your storyboard } }