延迟将HTML字符串加载到UIWebView中

时间:2013-04-30 05:15:38

标签: ios objective-c performance uiwebview uinavigationcontroller

我在导航控制器中有两个视图控制器。第一个视图控制器有一个带按钮的菜单。按此按钮移动到第二个视图控制器并将html字符串加载到UIWebView中。没有其他任何东西被加载到webview,只是一个带有html代码的简单NSString。基本上我正在使用webview作为其中一个uiviews的子视图制作翻转卡片(两个视图)。

以下是代码:

containerView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 280)];
[self.view addSubview:containerView];

frontView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, 280)];
frontView.layer.cornerRadius = 10;
frontView.layer.masksToBounds = YES;
[frontView setBackgroundColor:[UIColor whiteColor]];
backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, 280)];
backView.layer.cornerRadius = 10;
backView.layer.masksToBounds = YES;
[backView setBackgroundColor:[UIColor yellowColor]];
[containerView addSubview:frontView];

webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 280, 280)];
webView.scalesPageToFit = YES;
webView.userInteractionEnabled = NO;

NSString *htmlString = @"<head><meta name='viewport' content='width=device-width;'><style type='text/css'>html,body {margin: 0;padding: 0;width: 100%;height: 100%;}html {display: table;}body {display: table-cell;vertical-align: middle;padding: 20px;text-align: center;-webkit-text-size-adjust: none;}</style></head><ruby>金<rt>きん</rt></ruby><ruby>曜<rt>よう</rt></ruby><ruby>日<rt>び</rt></ruby>";

[webView loadHTMLString:htmlString baseURL:nil];
[frontView addSubview:webView];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                      action:@selector(flip)];
[self.view addGestureRecognizer:tap];

}

问题:我注意到我第一次按下按钮转换到第二个视图控制器时,看到加载到webview的html字符串有延迟(它只有0.5-1秒)。如果我回到第一个视图控制器并再次按下按钮,则不会发生这种情况 - 这次是即时的。

任何可能导致第一次延迟的想法以及如何避免它?

由于

3 个答案:

答案 0 :(得分:5)

加载导致延迟的html字符串是一个尚未解决的已知问题

你可以尝试的是包含一个活动指示器并显示它隐藏webview并设置动画直到webview完全加载。这可以通过UIWebview的委托实现。当加载完成时取消隐藏webview并删除活动< / p>

使用

-(void)webViewDidFinishLoad:(UIWebView *)webView ;
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;

答案 1 :(得分:2)

请取消选中UIWebView中的电话号码检测。它就像魅力一样。

答案 2 :(得分:0)

另一个解决方案是从namespace app\components; class SuperAdminAccessControl extends \mdm\admin\components\AccessControl { function __construct() { $this->setUser('superadmin');//table name } } 切换到UIWebView

-[UIButton setAttributedTitle:forState:]

这仍然有点慢,但至少延迟现在在你的控制之下。此外,上述功能似乎不像WebKit那样功能齐全;但是应该足够好用于你的目的。