2

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

这是代码:

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>金&lt;rt>きん</rt></ruby><ruby>曜&lt;rt>よう</rt></ruby><ruby>日&lt;rt>び&lt;/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 秒)。如果我回到第一个视图控制器并再次点击按钮,这不会发生 - 这次是即时的。

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

谢谢

4

3 回答 3

5

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

您可以尝试包含一个活动指示器并显示它隐藏 webview 并对其进行动画处理,直到 webview 完全加载。这可以通过 UIWebview 的委托来实现。当加载完成时,取消隐藏 webview 并删除活动

利用

-(void)webViewDidFinishLoad:(UIWebView *)webView ;
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
于 2013-04-30T05:54:27.917 回答
3

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

于 2017-05-16T11:56:42.030 回答
0

另一种解决方案是从切换UIWebView-[UIButton setAttributedTitle:forState:]

[[NSAttributedString alloc] initWithData:[@"<head><meta ... </ruby>" dataUsingEncoding:NSUTF8StringEncoding]
                                 options:@{
                                           NSCharacterEncodingDocumentAttribute : @(NSUTF8StringEncoding),
                                           NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType
                                          }
                      documentAttributes:NULL
                                   error:NULL];

这仍然有点慢,但至少延迟现在在您的控制之下。此外,上面的功能似乎没有 WebKit 功能完整;但是应该足以满足您的目的。

于 2017-05-16T12:21:50.503 回答