我們?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];