由于蘋(píng)果強(qiáng)制要求使用WKWebView评汰,在更換過(guò)程中就遇到一些問(wèn)題读拆,比如,在之前UIWebview好好的纸镊,轉(zhuǎn)移到wk后顯示就不正常,加載html字體過(guò)小概疆,這是因?yàn)閡iwebview有自動(dòng)適配功能逗威。
為了適配wk上顯示的html字體,操作如下:
- 讓網(wǎng)頁(yè)端開(kāi)發(fā)適配html岔冀,
讓他們添加頭部
"<header><meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'></header>"
-
針對(duì)直接加載html的
也就是使用如下方法加載的
- (nullable WKNavigation *)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;
可以在html前面加個(gè)頭部凯旭,以達(dá)到適配的目的
具體代碼如下:
#define HEAD @"<header><meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'></header>"
NSString *headerString = HEAD;
[web loadHTMLString:[headerString stringByAppendingFormat:@"%@",HTML] baseURL:nil];
- 使用url加載的,這種情況應(yīng)該是最多的使套,因?yàn)樽罱箨懙腶pp都需要提示隱私協(xié)議等罐呼,而隱私協(xié)議最好的方式也就是用html格式
適配代碼稍微麻煩一點(diǎn),具體如下:
//適配腳本語(yǔ)言
NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";
//創(chuàng)建WKUserScript自定義腳本
WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
//創(chuàng)建WKUserContentController
WKUserContentController *wkUController = [[WKUserContentController alloc] init];
//給WKUserContentController上添加自定義腳本
[wkUController addUserScript:wkUScript];
//創(chuàng)建WKWebViewConfiguration配置
WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
//給webview設(shè)置內(nèi)容控制器The user content controller to associate with the web view.
wkWebConfig.userContentController = wkUController;
//用配置的s初始化方式創(chuàng)建webview
WKWebView *web = [[WKWebView alloc]initWithFrame:[UIScreen mainScreen].bounds configuration:wkWebConfig];
//加載url
[web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:URL]]];