隐藏TabBar后,UIWebView加载过程中和加载失败时,底部出现黑边的问题解决
2013-06-13 16:17
423 查看
描述
我的应用里同时使用了 TabBar 和 Navigation Bar,由于原本的 TabBar 不能满足我的外观效果要求,我用自定义的 view 实现了一个 TabBar 的外观,隐藏了原本的 TabBar,切换视图的功能还是调用原来 TabBar 的接口。不知道是不是因为自定义TabBar的原因,当通过导航控制器进入第二个视图,并在第二个视图中隐藏TabBar时会出现一些问题,我的第二个视图是一个WebView,打开一个网页,如果网页加载较慢或者未加载到内容时,底部原来的TabBar位置是一块黑色区域,感觉上是那块区域没有被WebView利用到。如果页面加载成功那个黑色区域就会被WebView利用到。
原因
我猜想,可能是因为隐藏TabBar后,WebView并没有及时重新绘制视图,只有当其加载页面完成后才去更新。因此我的解决方案是做了一个空白的html页面(html结构完整,只是body为空白)放到工程中,WebView在加载在线数据之前先加载本地的空白html页面,在线数据加载失败时也加载一次空白html页面,这就相当于我们主动要求WebView去重新绘制视图。不知道我的猜想是否正确,不过用这个方案确实完美解决了黑边的问题。
主要代码
空白html页面内容,文件名为load_error.html
加载本地html文件的方法
加载在线数据的逻辑
加载错误的处理逻辑
我的应用里同时使用了 TabBar 和 Navigation Bar,由于原本的 TabBar 不能满足我的外观效果要求,我用自定义的 view 实现了一个 TabBar 的外观,隐藏了原本的 TabBar,切换视图的功能还是调用原来 TabBar 的接口。不知道是不是因为自定义TabBar的原因,当通过导航控制器进入第二个视图,并在第二个视图中隐藏TabBar时会出现一些问题,我的第二个视图是一个WebView,打开一个网页,如果网页加载较慢或者未加载到内容时,底部原来的TabBar位置是一块黑色区域,感觉上是那块区域没有被WebView利用到。如果页面加载成功那个黑色区域就会被WebView利用到。
原因
我猜想,可能是因为隐藏TabBar后,WebView并没有及时重新绘制视图,只有当其加载页面完成后才去更新。因此我的解决方案是做了一个空白的html页面(html结构完整,只是body为空白)放到工程中,WebView在加载在线数据之前先加载本地的空白html页面,在线数据加载失败时也加载一次空白html页面,这就相当于我们主动要求WebView去重新绘制视图。不知道我的猜想是否正确,不过用这个方案确实完美解决了黑边的问题。
主要代码
空白html页面内容,文件名为load_error.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> </body> </html>
加载本地html文件的方法
//加载本地的一个空html页面,解决webview没有加载完网页,底部留下tabbar黑色区域的问题 - (void)loadBlankPage { if (!errorRequest) { NSString *filePath = [[NSBundle mainBundle] pathForResource:@"load_error" ofType:@"html"]; NSURL *errorUrl = [NSURL fileURLWithPath:filePath]; errorRequest = [NSURLRequest requestWithURL:errorUrl]; } [self.webView loadRequest:errorRequest]; }说明:其中errorRequest是自己的一个成员变量。
加载在线数据的逻辑
[self loadBlankPage]; [self performSelector:@selector(loadPage) withObject:nil afterDelay:0.5f];说明:这里的loadPage方法是自定义的加载在线网页的方法,加载在线页面紧接在加载空白html页面之后,做了0.5秒延迟的原因是保证本地html页面加载完成,否则会收到错误代码为-999的加载错误,表示加载未完成,被中断。这也说明WebView的 loadRequest: 方法是异步的。
加载错误的处理逻辑
- (void)webView:(UIWebView *)sender didFailLoadWithError:(NSError *)error { NSLog(@"error:%@", [error description]); //为了避免加载空白页面中断进入死循环 if (error.code != -999) { [self loadBlankPage]; } }说明:这里不处理 -999的错误是为了防止进入死循环。其他错误情况会去加载空白的html页面。
相关文章推荐
- iOS-UIWebview设置超时、加载失败、重新加载等问题解决
- UIWebView加载ANSI格式的txt文件出现乱码问题解决
- 故障解决:VS2005的水晶报表在WEB应用程序中多次使用后,就会出现加载报表失败.重启WEB服务器又正常了.过一段时间又出同样问题
- 关于ENU OS加CHS VS2008出现包加载失败问题解决方法存档
- 解决安卓加载长图出现解码失败导致显示空白的问题
- 解决隐藏tabbar后底部视图button不响应问题
- hidesBottomBarWhenPushed隐藏底部TabBar时push的VC出现白色遮挡问题
- 故障解决:VS2005的水晶报表在WEB应用程序中多次使用后,就会出现加载报表失败.重启WEB服务器又正常了.过一段时间又出同样问题
- WINDOWS8下面安装mssql2005过程中出现启动服务失败问题解决
- 关于push进入下一页,底部tabbar隐藏的小问题
- iPhone 在XML或JSON交互过程中出现的编码问题解决办法
- 解决ListView滑动时出现黑边的问题
- .NETC#下AE二次开发过程中出现的属性表不能更新问题解决办法
- 加载tabbar的视图在启动后直接push到下一界面出现navigationbar失效的解决方法
- 解决在自定义tabbar的时候出现双tabbar的问题
- SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法【已验证 】
- asp.net 使用Ueditor过程中出现的问题及解决办法
- 【问题请教】MySQL数据源配置过程中出现的问题===此问题已经解决!
- android 图片加载库 Glide 的使用过程中出现的问题
- 在Eclipse下,出现“找不到或无法加载主类 ”的问题的解决方式