WKWebView适应屏幕宽度

来源:互联网 发布:java新手入门教程视频 编辑:程序博客网 时间:2024/06/06 05:00

在iOS 8以后苹果推出了一个新的框架Webkit,用WKWebView代替了UIWebView,WKWebView“有占内存少,速度快”的优点

在UIWebView中,这个scalesPageToFit是可以自适应屏幕的,但是效果不如直接修改js好。

但是WKWebView中没有这个属性,为了解决这个问题,有两个方法:1、告诉前端开发人员直接在html文件的源码中改,增加

viewport视口适配屏幕

2、通过js修改,避免前端人员忘记或者没有做移动端的适配,我们自己应该规避问题的发生带来不好的用户体验

*1.

    //页面加载完成之后调用

    @objc(webView:didFinishNavigation:)func webView(_ webView:WKWebView, didFinish navigation:WKNavigation!) {

        var scriptContent ="var meta = document.createElement('meta');"

        scriptContent +="meta.name='viewport';"

        scriptContent +="meta.content='width=device-width';"

        scriptContent += "document.getElementsByTagName('head')[0].appendChild(meta);"

        webView.evaluateJavaScript(scriptContent, completionHandler:nil)

    }

出现的问题:当网络不好的时候很长时间走不到这个代理方法,屏幕就无法自适应,用户看到的是一个没有适配的页面,直到响应这个方法才适配屏幕。
*2.

    //MARK:---加载webView

    func loadWebView(){

//适配屏幕

        let jsStr ="var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"

        let wkUserScript =WKUserScript.init(source: jsStr, injectionTime:WKUserScriptInjectionTime.atDocumentStart,forMainFrameOnly: true)

        let wkUController =WKUserContentController.init()

        wkUController.addUserScript(wkUserScript)

        

        let wkWebConfig =WKWebViewConfiguration.init()

        wkWebConfig.userContentController = wkUController


        detaiweb =WKWebView(frame: self.view.bounds,configuration:wkWebConfig)

detaiweb.navigationDelegate =self

        detaiweb.uiDelegate =self

    }

注意:尽量使用WKUserScriptInjectionTime.atDocumentStart参数,web开始加载的时候就是适配好的,用户体验更好

原因:看很多文章写得是WKUserScriptInjectionTime.atDocumentEnd出现*1的问题

0 0
原创粉丝点击