2017-10-17 133 views
1

我有一个应用程序/项目,部署目标版本 - iOS的10的iOS:WKWebView Vs的UIWebView的

我用了UIWebView,现在已被废弃,由WKWebView取代。所以,我想在我的项目中用WKWebView替换UIWebView。

它迫使我要么使用UIWebView(与iOS 10)或更改部署目标到iOS 11.

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

问题声明:故事板的视图控制器不支持两个版本,我的意思是,在故事板,如果我设置视图控制器的部署目标到iOS 11,然后在iOS的10应用程序崩溃(和明显的它应该),如果我设置视图控制器的部署目标到iOS 10,然后故事板不允许我建立项目。

对于iOS 10,WKWebView表明我这个错误:Xcode 9 GM - WKWebView NSCoding support was broken in previous versions

问:我怎样才能让故事板(查看器)使用WKWebView为iOS 11 UIWebView为iOS 10?故事板(视图控制器)中是否有配置设置或选项可以让我添加两个接口插座?

+0

在IB/Storyboard中有没有具体的事情要做?如果不是,我只需使用“占位符”UIView,并用'WKWebView'将其替换为'viewDidLoad'。 – DonMag

+0

@DonMag我可以使用UIViewWebview(UIWebView到WKWebView)吗?怎么样?曾经尝试过吗? – Krunal

+0

增加了一种方法来做它作为答案... – DonMag

回答

3

可以只需创建并通过代码添加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 

    } 

} 
+0

^这是你的答案。而不是必须改变部署目标,或者使用'if #available(iOS,10 *){}'等等等等......这实际上会让你的webView性能提升,特别是如果你使用了大量的javascript。不要忘记你的ViewController文件顶部的'import WebKit'。我在为iOS> = 9构建的项目中使用了WKWebView –