对UIWebView的使用还不太熟悉,刚开始用,loadHTLMstring是没有问题的,正常解析显示HTML字符内容,
但由于项目要求,需要对UIWebView做自定义修改,需求如下
其中的图片以及标题栏并非HTML本身的内容,而是要求自己添加的,
注意一点:自定义的内容要随uiwebview滑动,需要把内容添加到_myWebView.scrollView 如下:
- (void)layoutNavButton{
//添加备图和分割线
[_myWebView.scrollView addSubview:standbyImage];
[_myWebView.scrollView addSubview:line];
}为了添加的东西不会把HTML内容遮住,需要头部留空白,直接修改要显示的HTML字符,在开头插入
<div style='height:161px'> </div> 标示留空白高度为161
以上达到需求的基本目的了,但问题来了,图片加载方面,刚开始我用了图片缓冲的方法加载图片:EGOImageView带异步加载图片并缓存功能
EGOImageView *mImage = [[EGOImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width,110)];
mImage.placeholderImage = [UIImage imageNamed:@"nopic.png"];
mImage.imageURL = [NSURL URLWithString:information_group_image];
添加图片后,打开uiwebview,程序崩溃!!!!!!!
报错信息:
void SendDelegateMessage(NSInvocation*): delegate (webView:webViewDidFinishLoad:) failed to return after waiting 10 seconds. main run loop mode...
把mImage删除后就不会崩溃,说明就是图片的问题,原因是EGOImageView加载图片是异步加载,有缓冲的效果,可能是(我也不确定是否正确)uiwebview加载HTML的方法
loadHTMLString: baseURL: 不允许有异步进程。。。。。
修改方法:直接用nsdata下载图片,然后直接扔到uiwebview里面去,其实这是最笨的方法了,但起码解决问题了。。。。代码如下
//此处加到webview的scrollview里面的图片,不能用缓冲机制,会loadfailed导致崩溃
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[jsonDict objectForKey:@"information_image"]]];
UIImageView *imageV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, PIGHEIGHT)];
[imageV setImage:[UIImage imageWithData:data]];
if ([jsonDict toString:@"information_details"] != nil && ![[jsonDict toString:@"information_details"] isEqualToString:@""]){
tempstr = @"<div style='height:161px'> </div>";
NSString *HTMLString = [tempstr stringByAppendingString:[jsonDict toString:@"information_details"]];
[_myWebView loadHTMLString:HTMLString baseURL:nil];
if (imageV.image !=nil) {
[_myWebView.scrollView addSubview:imageV];
}
}