Other

加载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进行加载;

上一篇下一篇

猜你喜欢

热点阅读