UIWebView加载进度和调整网页以适应视图页面?

9

我正在使用UIWebView加载网页。

有三个问题:

1.在UIWebView加载页面时,是否可以跟踪百分比进度?

2.我注意到当Safari加载网页时,URL文本框会显示一个蓝色背景的进度指示器,以告诉用户加载网页的百分比。这是什么技术?

3.我知道有属性scalesPageToFit

scalesPageToFit是一个布尔值,确定网页是否缩放以适应视图,并且用户可以更改缩放比例。

我尝试将其设置为YES,但看起来它不在公共API中,我的应用程序停止了并出现黑屏,我不确定哪里出了问题?

5个回答

21

回答问题 #1):

与其使用UIWebView,您可以使用NSURLConnection将网页作为NSData对象拉取下来。当您从请求中获得初始响应时,

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

Web服务器应返回一个“预期内容大小”的值(应包含在响应中)。然后每次接收数据时都会继续调用以下方法:

 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

将数据追加到现有的NSMutableData对象中。然后,您可以将您当前数据对象的大小(NSMutableData.length)与期望的响应大小进行比较。

percentage = (myData.length*100)/theResponse.expectedContentSize;

那么你可以用这个百分比更新进度条!当

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

运行时,使用您的数据进行调用

[myWebView loadData:myData MIMEType:myMimeType textEncodingName:myEncoding baseURL:baseURL];

它会将你下载的所有内容加载到网页视图中。


4
请注意,这种方法只能告诉你第一个“index.html”文件何时被加载,而无法告知整个网页何时被完全加载。但是,“index.html”页面可能包含图片、脚本和其他需要加载的资源,在这些资源被加载完之前,网页才算真正意义上的“加载完成”。但要完全正确,则需要自己解析HTML。 - Ben G
实际上,整个问题已经在这里讨论过了:https://dev59.com/z3I-5IYBdhLWcg3wW24L,还提供了一个私有API的解决方案。 - Ben G

4

回复 #3:

您可以尝试在包含您的webview的UIView的viewDidLoad事件中指定scalePagesToFitYES,例如:

- (void)viewDidLoad {
    self.webView.scalesPageToFit = YES;
    //other code here...
}

对于无法解决的情况,请参考以下StackOverflow问题:UIWebView不会缩放内容以适应,在这个问题中,提问者(随后是回答者)提供了这个解决方案。
显然,您可以使用JavaScript来调整页面大小以适应浏览器:
NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"];
[webLookupView stringByEvaluatingJavaScriptFromString:jsCommand];

0

关于#2的问题:我相信Safari在UITextField上使用了私有API调用(因此如果您想提交到应用商店,您将无法这样做),但是您应该能够通过在进度条上方放置一个没有边框的文本框来自己实现这个功能。


0

0
您可以尝试使用这个UIWebView的子类,它使用了私有的UIWebView方法 - 因此,这个解决方案并不是100%的AppStore安全(虽然一些应用程序几乎100%地使用它:Facebook,Google应用程序等)。

https://github.com/petr-inmite/imtwebview


作者说这不是百分之百的AppStore安全,所以我们不要使用它! - AVEbrahimi
尽管它不是100%的App Store安全,但可以用于Cydia发布。 - joshis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接