创建 WKWebView
_webView = [[WKWebView alloc]initWithFrame:self.view.bounds];
_webHeight = _webView.height;
_webView.backgroundColor = [UIColor whiteColor];
_webView.UIDelegate = self;
_webView.navigationDelegate = self;
_webView.scrollView.bounces = NO;
_webView.scrollView.scrollEnabled = NO;
_webView.scrollView.showsHorizontalScrollIndicator = NO;
_webView.scrollView.delegate = self;
WKWebView加载 html 数据:
NSString *result = [NSString stringWithFormat:@"<img style='display: block; max-width: %.0f'",kScreenWidth];
id courseData = self.object;
NSAttributedString *priceStr = [ECFormatHelper attributedStringForPromotionPrice:[courseData valueForKey:@"price"] decimal:2 smallFontSize:16];
NSString *subtitle = [CYDataHelper isNull:[courseData valueForKey:@"subtitle"]]?@"还没有设置课程简介":[courseData valueForKey:@"subtitle"];
NSString *title = [CYDataHelper isNull:[courseData valueForKey:@"title"]]?@"还没有设置课程标题":[courseData valueForKey:@"title"];
NSString *teacher = [CYDataHelper isNull:[courseData valueForKey:@"teacher"]]?@"暂无":[courseData valueForKey:@"teacher"];
NSDictionary *dict = @{@"title":title,@"subtitle": subtitle,@"num":@([[courseData valueForKey:@"num"]integerValue]),@"expiryDay":@([[courseData valueForKey:@"expiryDay"]integerValue]),@"teacher":teacher};
// 这里判断 数据 空值的情况 <null>
NSString *header = @"<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\"/><meta name=\"apple-mobile-web-app-capable\" content=\"yes\"><meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\"><link rel=\"stylesheet\" type=\"text/css\" /><style type=\"text/css\"> </style></head>";
NSString *cssStr = [NSString stringWithFormat:@"<html>%@<body>",header];
// 课程详情
NSString *content = [NSString stringWithFormat:@"%@%@%@%@",
[CYDataHelper isNull:[courseData valueForKey:@"about"]]?@"":[courseData valueForKey:@"about"],
[CYDataHelper isNull:[courseData valueForKey:@"audiences"]]?@"":[courseData valueForKey:@"audiences"] ,
[CYDataHelper isNull:[courseData valueForKey:@"goals"]]?@"":[courseData valueForKey:@"goals"],
[CYDataHelper isNull:[courseData valueForKey:@"teacherInfo"]]?@"":[courseData valueForKey:@"teacherInfo"]
];
if (content.length > 0) {
content = [NSString stringWithFormat:@"%@%@",@"<div style=\"color: #454545; font-size: 18px; font:Arial;\">内容简介</div>",content];
}
// 把里面的图片标签遍历替换
content = [content stringByReplacingOccurrencesOfString:@"<img" withString:result];
NSString *detailHtml = [NSString stringWithFormat:@"%@%@%@",cssStr,
content,@"</body></html>"];
[_dataSource addObjectsFromArray:@[priceStr,dict,detailHtml]];
[self.webView loadHTMLString:detailHtml baseURL:nil];
WKWebView代理方法:
#pragma mark --- WKNavigationDelegate ---
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
[_webView evaluateJavaScript:@"document.body.offsetHeight" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
// 加20像素是为了预留出边缘
CGFloat height = [result doubleValue] + 20;
// 设置一个高度属性,赋值后便于设置cell的高度
_webHeight = MAX(self.webView.height, height);
// 设置cell上子视图的frame,主要是高度
_webView.frame = CGRectMake(0, 0, kScreenWidth, _webHeight);
_scrollView.frame = CGRectMake(0, 0, kScreenWidth, height);
_scrollView.contentSize = CGSizeMake(kScreenWidth, height);
// 获取了高度之后,要更新webview所在的cell,其他的cell就不用更新了,这样能更节省资源
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:[NSIndexPath indexPathForRow:2 inSection:0], nil] withRowAnimation:UITableViewRowAnimationNone];
}];
}
创建一个 scrollview ,这样可以添加手势,双击放大倍数进行查看,webview 加在 scrollview 上。
- (UIScrollView *)scrollView
{
if (!_scrollView) {
_scrollView = [[UIScrollView alloc]init];
_scrollView.delegate = self;
_scrollView.zoomScale = 1;
_scrollView.maximumZoomScale = 10;
_scrollView.tag = 1000;
[_scrollView addSubview:self.webView];
}
return _scrollView;
}
然后在 tableview 的代理方法- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中:在指定的
[cell.contentView addSubview:self.scrollView];