2017-10-17 6 views
1

Iましたデプロイメント・ターゲットのバージョンでアプリ/プロジェクト - iOSの10のiOS:WKWebView対のUIWebView

私はUIWebViewを使用していた、今は非推奨とWKWebViewに置き換えられています。だから私は私のプロジェクトでWKWebViewとUIWebViewを置き換えたい。

それは私が展開ターゲットを変更することはできませんが、ミドルウェア・ソリューションとして、私は(プログラム的に)の両方をサポートし、コードを追加しました(iOSの10で)UIWebViewを使用するかに私を強制またはiOS 11.

に展開ターゲットを変更。つまり、ユーザーのデバイスOSが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

質問:はどのように私はiOSの10のためのiOS 11とUIWebViewためWKWebViewを使用するようにストーリーボード(ビューコントローラ)を作ることができますか?ストーリーボード(ビューコントローラー)に両方のインターフェースアウトレットを追加できる設定やオプションがありますか?

+0

IB /ストーリーボードで何か具体的なことはありますか?もしそうでなければ、単に "プレースホルダー" UIViewを使い、 'viewDidLoad'の中でそれを' WKWebView'に置き換えます。 – DonMag

+0

@DonMag UIViewWebview(UIWebView to WKWebView)で行うことはできますか?どうやって?それを試したことがありますか? – Krunal

+0

答えとして1つの方法を追加しました... – DonMag

答えて

3

コードを使ってWKWebViewを作成して追加するだけです。

あなたのストーリーボードでレイアウトの目的を視覚的に表現したい場合は、これを行う方法があります。

ストーリーボードのビューコントローラに標準UIViewを追加します。これはあなたのウェブビューの「所有者」として機能します。それを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にパフォーマンスの向上をもたらします。 ViewControllerファイルの先頭に 'import WebKit'を忘れてはいけません。私は、iOS> = 9のために構築されたプロジェクトでWKWebViewを使用しました –