加载HTMLString
2017-09-20 本文已影响26人
春风依旧
之前用UIWebView做过混合开发,混合开发的总结以后再写吧!最近在cell中嵌套webview来加载html字符串,希望以后能再接再励不断总结。
一、UILable 加载本地HTMLString
1、把HTMLString 转化为NSAttributedString:
- (NSAttributedString *)attributedStringWithHTMLString:(NSString *)htmlString{
NSDictionary *options = @{ NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute :@(NSUTF8StringEncoding) };
NSData *data = [htmlString dataUsingEncoding:NSUTF8StringEncoding];
return [[NSAttributedString alloc] initWithData:data options:options documentAttributes:nil error:nil];
}
2、计算UIlable记载富文本之后的高度重置lable的frame;
CGFloat height = [self.lable.attributedText boundingRectWithSize:CGSizeMake(Device_Width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin context:nil].size.height;
//针对富文本有专门的计算动态高度的方法,与nsstring 大同小异;
self.lable.height = height;
二、UItextview 与UIlable 加载方式一样也是通过上述方法计算高度
三、UIWebView加载HTMLString
以cell中嵌套UIWebView举例,只举例一个cell,如果多个cell,cell的高度还是要放在对应的model中存储,否则会造成复用;
当cell中嵌套UIWebview 时,需要在返回高度的地方返回cell.height ,可是webview的高度只有在加载HTMLString之后调动结束加载HTMLString之后才能获得UIWebview的高度,从而cell 的高度才能获得。
首先,可以定义一个返回cell 高度的类变量,用静态变量存储,用来在webview加载完成之后重新存储新的高度。
+(CGFloat)cellHeight{
return staticheight;
}
-(void)webViewDidFinishLoad:(UIWebView*)webView{
CGFloat height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue]+20 ;
_webView.frame = CGRectMake(0, 0, kScreenWidth - 20, height);
if (staticheight != height+1) {
staticheight = height+1;
if (staticheight > 0) {
if (_reloadBlock) {
_reloadBlock();
}
}
}
}
如果是纯HTMLString文本,可以使用UILable或者UItextview,(但是字体会小很多,相对于UIWebview加载来说,大神有知道的指点下),如果是带有图片和视频的HTMLString,可以使用UIWebview进行加载;