Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 预加载UIWebView,避免白屏闪烁_Iphone_Uiwebview - Fatal编程技术网

Iphone 预加载UIWebView,避免白屏闪烁

Iphone 预加载UIWebView,避免白屏闪烁,iphone,uiwebview,Iphone,Uiwebview,我正在开发一个应用程序,它具有表格导航功能,最终可以深入到显示各种信息的UIWebView。然而,从UITableView的流畅性到UIWebView的缓慢性转变对用户来说是不和谐的,因此我希望尽我所能改善这种体验 具体来说,tableview和UIWebView页面的背景都是黑色的,但是当我打开UIWebView时,它会闪烁一秒钟左右(本地和远程HTML文件都是这种情况)。我如何(理想情况下)预加载此过程,或者(至少)使“闪烁”全黑而不是全白?我尝试将视图/网络视图的背景设置为黑色,但似乎没有

我正在开发一个应用程序,它具有表格导航功能,最终可以深入到显示各种信息的
UIWebView
。然而,从
UITableView
的流畅性到
UIWebView
的缓慢性转变对用户来说是不和谐的,因此我希望尽我所能改善这种体验

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


现在在我的应用程序中,当用户选择一个单元格时,应用程序只加载
UIWebView
子类并将其推到导航堆栈上。
UIWebView
子类有一个活动指示器,它在
WebViewDidStartLoad
和WebViewDidFinishLoad上启动和停止动画,工作正常,但对“白色闪光”没有任何帮助。

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

 - (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];
}
-(void)viewDidLoad{
[super-viewDidLoad];//objWebView是UIWebView的出口
[objWebView loadHTMLString:@“baseURL:nil];
//延迟越大,误差越小,因此在0.1-0.3范围内即可
[self-performSelector:@selector(loadURL:)with object:nil afterDelay:0.1];
}
-(无效)加载URL:(id)发件人{
[objWebView stopLoading];//添加此行以停止上一个请求
NSURL*url=[NSURL URLWithString:@”http://www.google.com"];
NSURLRequest*req=[nsurlRequestRequestWithURL:url];
[objWebView加载请求:req];
}
在这里,我在0.1秒后执行请求,否则它将看起来像您的情况一样白色。或者你可以根据时间给出延迟时间。。干杯:)

试试你的衣服

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

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

[webView setHidden:YES];  
[webView setDelegate:self];
创建my webView并发出请求,然后添加此委托方法以处理已完成的请求时:

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

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

成功地完成了它。 必须首先在Interface Builder中创建视图。 然后,在包含webview的ViewController的init中使用initWithFrame将html加载到webview(这就是神奇之处):

然后,只需将webView加载到视图中,就会出现:

[viewWeb addSubview:webView];

这确实是一个界面设计的问题,直接在视图上绘制或在子视图中绘制,然后在视图中绘制该子视图的速度更快?

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

但它突然又回来了,我想是在iOS 7.0.4上。它发生在一款全新的iPad Air和一款旧款iPad mini non retina上。经过两天的拉扯,我终于找到了一份工作

假设您有webview,它被限制为横向,初始化如下:

WebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024.0f, 768.0f)];
然后,在预加载后,使用例如在webview上的“将Subview设置为Front”或“设置为Hidden:NO”(或者使用UIImageView上的“设置为Hidden:YES”或“从SuperView移除”)使其可见。但不是无缝切换视图,而是一个闪光灯和背景色闪烁约半秒

修复方法是更改您的webview的大小,非常轻微:

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

问题和解决方案的重现性很高。其工作原理与小数点后第四位(1024.0001f)的微小变化相同。在小数点后第五位(1024.00001f),闪光灯返回。高度(768.0f)的值似乎无关紧要。

您说UIWebView有黑色背景:是在HTML/CSS中设置的还是在视图本身上设置的?如果是前者,请尝试[myWebView setBackgroundColor:[UIColor blackColor];好消息-这成功了!在这一点上,它摆脱了白色。坏消息,现在出现了一个错误,知道为什么吗
Error:Error Domain=NSURLErrorDomain code=-999“操作无法完成。(NSURLErrorDomain Error-999)。”UserInfo=0x4baee10{nserrorfailingurkey=about:blank,nserrorfailingurstringkey=about:blank}
尽管有错误,但它实际上工作正常,因为它实际上仍然加载网站,并且不闪烁white.URL加载系统错误代码nsurErrorCancelled=-999取消异步加载时返回的nsurErrorCancelled。Web Kit framework委托在加载资源时执行取消操作时将收到此错误。请注意,如果取消下载,NSURLConnection或NSURLDownload委托将不会收到此错误。我将进一步研究,这可能是我自己的代码中的一些无关问题。我认为你回答了这个问题。谢谢实际上,NSURErrorDomain只会出现,因为上一个请求正在被取消。我想这将是第一次更新答案而且它会起作用。。然后接受答案:)我所做的是:
如果([error code]!=-999){//show alert,等等}
这样它就不会在这种情况下提醒用户。也许可以在自己的方法中设置setHidden:No,并使用performSelector afterDelay调用它。webViewDidFinishLoad在我的iPad3上还处于早期阶段,我真的认为这应该是公认的答案,它清晰易懂。使用属性表示法可能会更好:
webView.hidden=NO
webView.delegate=self
这不起作用,我使用了相同的方法,黑屏页面仍然出现。在加载网络URL之前,请尝试加载只有透明主体的HTML字符串。我记得修理过
WebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024.01f, 768.0f)];