我正在使用UIWebView加载网页。
有3个问题:
1.当UIWebView加载页面时,是否可以跟踪百分比进度?
2.我注意到当Safari加载网页时,URL文本字段显示蓝色背景进度指示器,告诉用户加载网页的百分比。这是什么技术?
3.我知道有属性scalesPageToFit
scalesPageToFit 一个布尔值,用于确定网页是否适合视图缩放,用户可以更改比例。
我尝试将其设置为YES,但看起来它不在公共API中并且我的应用程序停止了黑屏,我不确定是什么问题?
答案 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>
答案 3 :(得分:0)
Re#2:我相信Safari在UITextField上使用私有API调用(如果你想提交到应用程序商店,你就不能这样做),但你应该能够通过放置一个带有文本字段的文本字段来实现它。进度条顶部没有边框。
答案 4 :(得分:0)
要回答问题#1,有一个App Store安全的解决方案,并使用与Webkit类似的方法来跟踪进度。