首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每次启动时都会显示UIWebView白屏幕,同时预装所有选项卡

每次启动时都会显示UIWebView白屏幕,同时预装所有选项卡
EN

Stack Overflow用户
提问于 2015-02-02 07:03:24
回答 3查看 1.5K关注 0票数 1

在我提出我的问题之前,我想提到我试图寻找解决方案herehere

我正在创建一个混合应用程序,它使用本机UIWebView来呈现响应性设计的web应用程序。以下是问题说明:

  1. 我有一个UITabBarController
  2. 每个选项卡都有一个UIWebView
  3. 我要预装所有标签。
  4. 在第一个选项卡加载内容之前,我将显示一个UIActivityIndicator
  5. 白色屏幕显示约8-10秒的,然后内容开始出现. 我将很高兴看到这一次成为2-4秒.

以下是我的执行情况:

代码语言:javascript
复制
[self performSelectorOnMainThread:@selector(loadAllTabs) withObject:nil waitUntilDone:YES];

-(void) loadAllTabs
{
    for(UIViewController * viewController in  self.viewControllers){
        if(![[NSUserDefaults standardUserDefaults]boolForKey:@"isSessionExpired"])
        {
            if((int)[self.viewControllers indexOfObject:viewController] != 4)
            {
                viewController.tabBarItem.tag = (int)[[self viewControllers] indexOfObject:viewController];
                [viewController view];
            }
        }
    }
}

在WebView控制器的viewDidLoad中有:

代码语言:javascript
复制
[_tgWebView loadRequest:[NSURLRequest requestWithURL:homeURL]];  

我期待suppressesIncrementalRendering,但由于我预装所有标签,这是行不通的。因为我的应用程序支持iOS 7+,所以WKWebView不能在这里应用。

我还想到了increasing,发布图像的持续时间,但了解到这将不是一个好的做法。

这能用GCD实现吗?

请指出我的实现中的缺陷,这样我的应用程序才能获得更好的性能。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-10 13:20:43

This帖子让我过了一天。我现在为此使用了NSNotificationCenter

票数 2
EN

Stack Overflow用户

发布于 2015-02-02 09:51:59

首先,在每个选项卡上隐藏UIWebView,直到它完成加载,然后显示它。在UIWebView下面,您可以有一些占位符图像来描述它的加载。然后使用webViewDidFinishLoad委托方法在完成加载后显示web视图。这种方法将是非阻塞的。

代码语言:javascript
复制
- (void)webViewDidFinishLoad:(UIWebView *)webview
{
    if (webview.isLoading)
        return;
    else
        webView.hidden = false;
}

其次,预先加载第一个选项卡,然后加载后续选项卡,同时显示第一个选项卡。可以通过在第一个选项卡viewDidLoad方法中放置以下代码来做到这一点:

代码语言:javascript
复制
// Preload the subsquent tabs
for (UIViewController *aVC in self.tabBarController.viewControllers)
    if ([aVC respondsToSelector:@selector(view)] && aVC != self)
        aVC.view;

这样,附加的选项卡web视图将以非阻塞的方式加载到后台。您可以将其与隐藏web视图结合起来,同时加载,以防用户在加载页面之前导航到其他选项卡。

我用三个标签测试了它,它运行得很好。

因此,第一个视图控制器可以如下所示:@implementation FirstViewController

代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];

    // Load the website
    [self loadWebView];

    // Preload the subsquent tabs
    for (UIViewController *aVC in self.tabBarController.viewControllers)
        if ([aVC respondsToSelector:@selector(view)] && aVC != self)
            aVC.view;
}

-(void)loadWebView
{
    // Create Request
    NSURL *url = [NSURL URLWithString:@"http://anandTech.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    // Load the page
    [webView loadRequest:request];
}

- (void)webViewDidFinishLoad:(UIWebView *)webview
{
    if (webview.isLoading)
        return;
    else
        webView.hidden = false;
}

编辑:当视图有WebViews时,删除了GDC,因为它正在崩溃。

票数 3
EN

Stack Overflow用户

发布于 2015-02-04 13:00:51

很难直接找出问题的所在。

首先,我建议您检查您的网络连接,方法是将页面加载到同一Wifi上的桌面计算机上,以查看服务器是否太慢。

此外,您还可以一个接一个地加载页面,而不是同时加载所有页面,因为多个HTTP请求没有按FIFO顺序处理,它们可能会被无序处理,并且您的页面可能需要在显示之前加载所有资源。

你控制你自己的网页吗?您可以使用safari检查器检查您的网页,查看所花费的时间、资源加载、javascript处理或呈现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28272576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档