预加载UIWebView,避免白屏闪烁

时间:2011-05-13 03:55:32

标签: iphone uiwebview

我正在开发一个具有表格导航功能的应用,最终向下钻取到显示各种信息的UIWebView。然而,从UITableView的光滑过渡到UIWebView的缓慢不稳定的过渡对用户来说是不和谐的,所以我想尽我所能改善这种体验。

具体来说,tableViewsUIWebView页面的背景都是黑色背景,但是当我打开UIWebView时,它会闪烁空白白色大约一秒钟(这就是本地和远程HTML文件。)我如何(理想情况下)预加载此过程,或者(至少)使“闪光”全部为黑色而不是全白?我尝试将视图/ webView的背景设置为黑色,但这似乎没有帮助。

在我的应用程序中,当用户选择一个单元格时,应用程序只会加载UIWebView子类并将其推送到导航堆栈。 UIWebView子类有一个活动指示符,它开始于&停止在WebViewDidStartLoad和WebViewDidFinishLoad上制作动画,效果很好,但它没有做任何事情来帮助“白色闪光”。

6 个答案:

答案 0 :(得分:10)

我已经测试过了......我正在发送我用过的两种方法......

 - (void)viewDidLoad {
        [super viewDidLoad]; //objWebView is the outlet of UIWebView
        [objWebView loadHTMLString:@"<html><body style=\"background-color:black;\"></body></html>" baseURL:nil];

        //the more the delay the errors will be less so within 0.1-0.3 would be fine
        [self performSelector:@selector(loadURL:) withObject:nil afterDelay:0.1]; 
    }

-(void)loadURL:(id)sender{
    [objWebView stopLoading]; //added this line to stop the previous request
    NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
    NSURLRequest *req = [NSURLRequest requestWithURL:url];
    [objWebView loadRequest:req];
}

这里我在0.1秒之后执行请求,否则它将看起来像你的情况一样白。或者你可以根据时间给你延迟时间..干杯:)

答案 1 :(得分:9)

试试

    -(void)viewDidLoad{
       myWebView.hidden = YES;

然后在

    -(void)loadURL:(id)sender{  
        myWebView.hidden = NO;

答案 2 :(得分:2)

我用过:

[webView setHidden:YES];  
[webView setDelegate:self];

创建我的webView并发出请求,然后添加此委托方法来处理已完成的请求:

- (void) webViewDidFinishLoad:(UIWebView*)webView{  
    [webView setHidden:NO];  
}

答案 3 :(得分:0)

成功完成了它。 您必须首先在Interface Builder中创建一个视图。 然后使用包含webview的ViewController的init中的initWithFrame将html加载到webview(这是魔术发生的地方):

CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
webView = [[UIWebView alloc] initWithFrame:webFrame];

然后只需将webView加载到viewWillAppear中的视图中:

[viewWeb addSubview:webView];

这实际上是一个界面设计的问题,它是直接在视图上绘画还是在子视图中绘画然后在视图中绘制该子视图?

答案 4 :(得分:0)

我几年前解决了这个问题,使用了隐藏UIImageView后面的UIWebView的常用方法,然后在延迟后删除了UIImageView。

但它突然回来了,我认为在iOS 7.0.4上。它出现在全新的iPad Air,以及较旧的iPad mini非视网膜上。经过两天的拉毛,我终于找到了解决方法。

假设你有webview,它仅限于横向,初始化如下:

WebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024.0f, 768.0f)];

然后在预加载后使其可见,例如webview上的bringSubviewToFront或setHidden:NO(或者在UIImageView上使用setHidden:YES或removeFromSuperview)。但是不是无缝切换视图,而是闪光灯,背景颜色闪烁约半秒钟。

修复方法是稍微改变webview的大小:

WebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024.01f, 768.0f)];

问题和修复具有高度可重复性。它适用于小数点后第四位(1024.0001f)的变化。在小数点后第五位(1024.00001f),闪光灯返回。高度值(768.0f)似乎并不重要。

答案 5 :(得分:-2)

或者,您可以将webview的背景颜色设置为您正在使用的任何背景颜色,而不是解决问题。除非你当然使用图像。