在iOS开发过程中,用webView显示富文本内容是很常见的需求,加载富文本时通常还要根据webView的高度动态计算cell的高度(例如我们要在tableView或者collectionView的某个cell上)用webView显示一段富文本信息,通常富文本都是由图文混合的。会不多说,直接商代码。以cell为例
1.先申明一个webView属性,并设置代理
@property (strong,nonatomic) UIWebView *webView;
2.初始化webiew,并给webView一个默认高度
UIWebView *webView = [[UIWebView alloc] init];
self.webView = webView;
self.webView.delegate = self;
[self.contentView addSubview:webView];
[webView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.contentView);
make.top.equalTo(self.contentView);
make.width.equalTo(self.contentView);
make.height.equalTo(@10);
}];
3.在webView的代理方法中执行操作
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSString *js = @"function imgAutoFit() { \
var imgs = document.getElementsByTagName('img'); \
for (var i = 0; i < imgs.length; ++i) {\
var img = imgs[i]; \
img.style.maxWidth = %f; \
} \
}";
js = [NSString stringWithFormat:js, ScreenW - 20];
//注入js 到html中
[webView stringByEvaluatingJavaScriptFromString:js];
//调用
[webView stringByEvaluatingJavaScriptFromString:@"imgAutoFit()"];
//获取到webview的高度
CGFloat webViewHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
[self.webView mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(webViewHeight);
}];
if (self.reloadHeightBlock) {
self.reloadHeightBlock(webViewHeight);
}
}
reloadHeightBlock是在获取webView高度后传给控制器刷新tableView,webViewHeight高度为该cell对应tableView的高度。