徹底控制WKWebView的縮放

我們?cè)谧鲰?xiàng)目的時(shí)候經(jīng)??赡軙?huì)遇到需要禁止WKWebView縮放的需求。

并且同時(shí)我們可能還想要手動(dòng)去控制網(wǎng)頁(yè)的縮放比例。

目前,網(wǎng)上對(duì)WKWebView禁止縮放,主要有兩種方法:

第一種

修改webView內(nèi)的scrollView的代理,讓webview沒(méi)有東西是可以被縮放的。

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    return nil;
}

wkwebview在加載網(wǎng)頁(yè)之后,會(huì)先自動(dòng)適應(yīng)縮放一次,如果這么做了會(huì)導(dǎo)致無(wú)法按系統(tǒng)建議的縮放比例正確的顯示,并且此時(shí)你無(wú)法手動(dòng)控制縮放比例調(diào)整到合適的比例,也無(wú)法調(diào)整到自己想要的比例。(因?yàn)榇藭r(shí)代理中已經(jīng)沒(méi)有元素可以用來(lái)縮放了)

第二種

在html網(wǎng)頁(yè)里邊的mata標(biāo)簽加入user-scalable = no,若是原生js交互的話可采用注入js的方法更改meta。

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
    // 禁止放大縮小
    NSString *injectionJSString = @"var script = document.createElement('meta');"
    "script.name = 'viewport';"
    "script.content=\"width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no\";"
    "document.getElementsByTagName('head')[0].appendChild(script);";
    [webView evaluateJavaScript:injectionJSString completionHandler:nil];
}

這樣做的缺點(diǎn),同樣是你無(wú)法再手動(dòng)控制縮放比例了,并且在雙擊、或者遇到文本輸入的時(shí)候,可能還是會(huì)自動(dòng)縮放。

那么如何實(shí)現(xiàn)WKWebView縮放的徹底控制呢?

其實(shí)我們只需要在上述第一種方法的基礎(chǔ)上做一些完善即可。
設(shè)一個(gè)開關(guān)跟scrollView的delegate關(guān)聯(lián)起來(lái)即可,讓它只有在我們?cè)试S的情況下縮放。

舉例:

第一步

廢話^ _ ^

<WKNavigationDelegate,UIScrollViewDelegate>
。。。
self.webview.navigationDelegate = self;
self.webview.scrollView.delegate = self;

第二步

我們?cè)趙ebview的控制類中,設(shè)立一個(gè)控制屬性,比如

self.allowZoom = YES;

我們讓它初始值為YES,這樣在webview剛加載出網(wǎng)頁(yè)的時(shí)候,可以讓系統(tǒng)為我們進(jìn)行合適的縮放。(如果不需要也可以一開始就設(shè)為NO)

第三步

控制scrollView的代理,讓它只有在我們?cè)试S的時(shí)候,才能縮放

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    if(self.allowZoom){
        return nil;
    }else{
        return self.webview.scrollView.subviews.firstObject;
    }
}

第四步

在網(wǎng)頁(yè)加載完之后,(此時(shí)系統(tǒng)已經(jīng)為我們縮放了網(wǎng)頁(yè)),關(guān)閉縮放控制

-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
    self.allowZoom = NO;
}

手動(dòng)調(diào)整縮放大小

經(jīng)過(guò)剛才第四步之后,網(wǎng)頁(yè)已經(jīng)不允許再縮放了,手動(dòng)設(shè)zoomScale也沒(méi)用。
所以這個(gè)時(shí)候,如果需要手動(dòng)調(diào)整網(wǎng)頁(yè)縮放比例,或者是再加載下一個(gè)網(wǎng)頁(yè),只需要再把控制開關(guān)打開即可。

self.allowZoom = YES;
[self.webview.scrollView setZoomScale:0.8 animated:NO];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容