由于苹果强制要求使用WKWebView,在更换过程中就遇到一些问题,比如,在之前UIWebview好好的,转移到wk后显示就不正常,加载html字体过小,这是因为uiwebview有自动适配功能。
为了适配wk上显示的html字体,操作如下:
- 让网页端开发适配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>"
-
针对直接加载html的
也就是使用如下方法加载的
- (nullable WKNavigation *)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;
可以在html前面加个头部,以达到适配的目的
具体代码如下:
#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加载的,这种情况应该是最多的,因为最近大陆的app都需要提示隐私协议等,而隐私协议最好的方式也就是用html格式
适配代码稍微麻烦一点,具体如下:
//适配脚本语言
NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";
//创建WKUserScript自定义脚本
WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
//创建WKUserContentController
WKUserContentController *wkUController = [[WKUserContentController alloc] init];
//给WKUserContentController上添加自定义脚本
[wkUController addUserScript:wkUScript];
//创建WKWebViewConfiguration配置
WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
//给webview设置内容控制器The user content controller to associate with the web view.
wkWebConfig.userContentController = wkUController;
//用配置的s初始化方式创建webview
WKWebView *web = [[WKWebView alloc]initWithFrame:[UIScreen mainScreen].bounds configuration:wkWebConfig];
//加载url
[web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:URL]]];