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

时间:2010-04-01 13:39:36

标签: iphone uiwebview

我正在使用UIWebView加载网页。

有3个问题:

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

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

3.我知道有属性scalesPageToFit

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

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

5 个答案:

答案 0 :(得分:21)

回答#1)

您可以使用NSURLConnection将网页作为NSData对象拉出,而不是使用UIWebView。当您从

的请求中获得初始响应时
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

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

 - (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];

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

答案 1 :(得分:4)

Re#3:

您可以尝试在包含您的网页浏览的UIView的scalePagesToFit事件中将YES指定为viewDidLoad,例如:

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

对于不起作用的情况,请参阅以下StackOverflow问题:UIWebView does not scale content to fit其中提问者(以及随后的回答者)提供此解决方案。

显然,您可以使用javascript调整页面大小以适应浏览器:

NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"];
[webLookupView stringByEvaluatingJavaScriptFromString:jsCommand];

答案 2 :(得分:0)

你可以尝试使用这个使用私有UIWebView方法的UIWebView子类 - 因此,这个解决方案不是100%AppStore安全(尽管有些应用程序几乎100%使用它:Facebook,Google应用程序......)。 / p>

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

答案 3 :(得分:0)

Re#2:我相信Safari在UITextField上使用私有API调用(如果你想提交到应用程序商店,你就不能这样做),但你应该能够通过放置一个带有文本字段的文本字段来实现它。进度条顶部没有边框。

答案 4 :(得分:0)

要回答问题#1,有一个App Store安全的解决方案,并使用与Webkit类似的方法来跟踪进度。

https://github.com/otium/OTMWebView