IOS 使用WKWebView的loadHTMLString屬性加載外部css,js樣式對屏幕的適配

問題

? ? 原生項目中加載html頁面,使用WKWebview的loadHTMLString屬性加載html外部樣式,iOS中用UIWebView的loadHTMLString后圖片和文字失調(diào),圖片過大,超過屏幕,文字太小?;蛘邎D片太小。文字太大,總之就是不協(xié)調(diào)。

我們的需求是讓圖片的大小跟著屏幕的變化而變化。就是動態(tài)的去適應(yīng)屏幕。那么文字的字體就是我們自己能夠控制,可大可小。要想達到這種效果。我們要在用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]);

? ? }];

}

結(jié)果顯示如下:


顯示的內(nèi)容偏左邊顯示,右側(cè)有留白,并是不想要的全屏顯示效果;?

第一種解決辦法,(但沒達到想要的效果,咨詢前端的朋友說是內(nèi)容設(shè)置了固定的寬,作為小白,沒辦法解決)

1.在初始化代碼加入自適應(yīng)內(nèi)容

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

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

// 自適應(yīng)屏幕寬度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];

// 添加自適應(yīng)屏幕寬度js調(diào)用的方法

[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];

然后顯示如下:


圖片是放大了,但是放的太大了,內(nèi)容超出了屏幕的寬度,需要左右滑動才能看完整的內(nèi)容;

2.查了很多資料,發(fā)現(xiàn)一個解決辦法

原理就是用一個for循環(huán),拿到全部的圖片,對每一個圖片都處理一次,讓圖片的寬為100%,就是依照屏幕寬度自適應(yīng)。讓圖片的高atuo,自己主動適應(yīng)。文字的字體大小,能夠去改font-size:15px,這里我用的是15px。依據(jù)自己的詳細需求去改吧。


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];

最終效果:


完美顯示!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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