2017-10-17 200 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 –