美文网首页
IOS 使用WKWebView的loadHTMLString属性

IOS 使用WKWebView的loadHTMLString属性

作者: Peter_song | 来源:发表于2021-05-24 15:11 被阅读0次

问题

    原生项目中加载html页面,使用WKWebview的loadHTMLString属性加载html外部样式,iOS中用UIWebView的loadHTMLString后图片和文字失调,图片过大,超过屏幕,文字太小。或者图片太小。文字太大,总之就是不协调。

我们的需求是让图片的大小跟着屏幕的变化而变化。就是动态的去适应屏幕。那么文字的字体就是我们自己能够控制,可大可小。要想达到这种效果。我们要在用loadHTMLString载入字符串之前对它进行处理。

开始爬坑:

1.遵循代理 WKNavigationDelegate    WKUIDelegate

2.- (void)viewDidLoad {

    [super viewDidLoad];

    self.wkWebView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];    

    self.wkWebView.navigationDelegate = self;

    self.wkWebView.scrollView.delegate = self;

    self.wkWebView.UIDelegate = self;        

    NSString *html_str = [NSString stringWithFormat:@"<p>iPhone新品上市!</p><p><img src='http://mallres.lkkjjt.com/test_1620353949653' style='width: 548px;'></p><p>iPhone新品上市!iPhone新品上市!</p><p><img src='http://mallres.lkkjjt.com/test_1620353968737' style='width: 600px;'><br></p><p></p>"];

    [self.wkWebView loadHTMLString:html_str baseURL:nil];

    [self.view addSubview:self.wkWebView];

}

//获取加载的html页面的高度代理方法

- (void)webView:(WKWebView*)webViewdidFinishNavigation:(WKNavigation*)navigation {

    [webViewevaluateJavaScript:@"document.body.scrollHeight" completionHandler:^(id result, NSError *_Nullable error) {

        //result 就是加载完成后 webView的实际高度

        //获取后返回重新布局

        NSLog(@"%@",result);

        self.wkWebView.frame = CGRectMake(0, 0, self.view.frame.size.width, [result integerValue]);

    }];

}

结果显示如下:

显示的内容偏左边显示,右侧有留白,并是不想要的全屏显示效果; 

第一种解决办法,(但没达到想要的效果,咨询前端的朋友说是内容设置了固定的宽,作为小白,没办法解决)

1.在初始化代码加入自适应内容

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];

WKUserContentController *content = [[WKUserContentController alloc]init];

// 自适应屏幕宽度js

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

WKUserScript *wkUserScript = [[WKUserScript alloc] initWithSource:jSString injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];

// 添加自适应屏幕宽度js调用的方法

[contentaddUserScript:wkUserScript];

wkWebConfig.userContentController= content;

self.wkWebView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) configuration:wkWebConfig];

然后显示如下:

图片是放大了,但是放的太大了,内容超出了屏幕的宽度,需要左右滑动才能看完整的内容;

2.查了很多资料,发现一个解决办法

原理就是用一个for循环,拿到全部的图片,对每一个图片都处理一次,让图片的宽为100%,就是依照屏幕宽度自适应。让图片的高atuo,自己主动适应。文字的字体大小,能够去改font-size:15px,这里我用的是15px。依据自己的详细需求去改吧。

NSString*htmls = [NSString stringWithFormat:@"<html> \n"

"<head> \n"

"<style type=\"text/css\"> \n"

"body {font-size:15px;}\n"

"</style> \n"

"</head> \n"

"<body>"

"<script type='text/javascript'>"

"window.onload = function(){\n"

"var$img= document.getElementsByTagName('img');\n"

"for(var p in$img){\n"

"$img[p].style.width = '100%%';\n"

"$img[p].style.height ='auto'\n"

"}\n""}"

"</script>%@"

"</body>"

"</html>",htmlString];

最终效果:

完美显示!

相关文章

网友评论

      本文标题:IOS 使用WKWebView的loadHTMLString属性

      本文链接:https://www.haomeiwen.com/subject/svyxsltx.html