iOS webview懒加载html数据

        本文章只针对iOS初级开发者,如果大家有更好的意见欢迎在下方留言。

        不知道大家有没有遇到这样的问题,就是后台返回的数据里面有一段html格式的数据里面包含文字和众多的图片,然后在客户端通过webView加载这段数据,但是当图片太多的时候轻则会特别慢重则会导致占用太多内存导致手机内存不足退出app,显然不能满足公司产品的要求。

        为了解决这个问题真是搓破了脑瓜最后还是没有解决,无意中看到了一个帖子关于懒加载html数据中的图片,但是众说纷纭好多关于这种问题的描述,没有个能参考的帖子,所以今天在这里坐下来写这个帖子希望能帮助和我一样遇到此类问题的程序员。


关于解决这个问题需要准备一下一些东西:
1. jquery-3.1.1.js  -- 官网下载地址( jquery库官方下载 )

2. jquery.lazyload.js  -- 官网下载地址(  jquery.lazyload官方下载 )

3. 基本掌握js语法(当然不会也没关系)


废话不多说了,接下来上代码 

//添加到约束的html字符串(为了简单约束已去掉),content为返回的html格式字符串

NSString*str = [NSStringstringWithFormat:@"%@"content];

//将html字符串中的src替换为data-original否则jquery不会实现懒加载******

NSString*htmlReplaceString = [strstringByReplacingOccurrencesOfString:@"src"withString:@"data-original"];

//获取temp文件的路径(temp文件为实现懒加载的js核心代码)

NSString*tempPath = [[NSBundlemainBundle]pathForResource:@"temp"ofType:@"html"];

//加载temp内容为字符串

NSString*tempHtml = [NSStringstringWithContentsOfFile:tempPathencoding:NSUTF8StringEncodingerror:nil];

//替换temp内的占位符{{Content_holder}}为需要加载的HTML代码

tempHtml = [tempHtmlstringByReplacingOccurrencesOfString:@"{{Content_holder}}"withString:htmlReplaceString];

//Temp目录下的js文件(temp文件和jquery库)在根路径,因此需要在加载HTMLString时指定根路径

NSString*basePath = [[NSBundlemainBundle]bundlePath];

NSURL*baseURL = [NSURLfileURLWithPath:basePath];

//加载HTMLString

[_webViewloadHTMLString:tempHtmlbaseURL:baseURL];

以上代码加上本地的temp文件就可以实现一个html数据的懒加载,但是有时候我们不单单是在一个界面只加载一个webview,比如说在tableview的头视图上加载一个webview,但是webview懒加载时通过 

[webViewstringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"]

计算出来的高度是不包含懒加载的图片的高度的,如果图片有占位图那么这里计算出来的高度只是文字的高度与占位图的高度的和,因此就需要在图片动态加载的过程中动态的来计算webview的高度。

在这里通过给webview里面的scrollview的contentSize设置一个监听

[_webView.scrollViewaddObserver:selfforKeyPath:@"contentSize"options:NSKeyValueObservingOptionNewcontext:nil];

当图片动态的加载出来以后contentSize就会改变因此就会被监听到来重新给webview设置高度。

- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context

{

if([keyPathisEqualToString:@"contentSize"]) {

//检测contentSize的实时的高度

webViewHeight=_webView.scrollView.contentSize.height;

if(_webView.height==webViewHeight) {//实时高度和上次webView的高度作比较,如果相等了说明图片全部加载完成,否则没有则需要重新给webview高度赋值并且刷新tableview

return;

}

dispatch_async(dispatch_get_main_queue(), ^{

//重新将webview的高度设置为scrollview的内容高度

_webView.frame=CGRectMake(10,60,MainScreenWidth-10,webViewHeight+30);

//重新给headerView的frame赋值

_upView.frame=CGRectMake(0,0,UI_SCREEN_WIDTH,60+webViewHeight+90+70);

_tableView.tableHeaderView=_upView;

[_tableViewreloadData];

});

}

}

这里遇到一个小坑:当占位图的高度比实际图片的高度高的时候webview的高度还是文字和占位图的高度的和,就会在底部留出一个空白区域,目前还没有好的方法解决只能用高度比较小的占位图😋    如果大家有好的解决办法欢迎积极分享。


demo下载地址  demo传送门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容