简体   繁体   中英

UIWebView loading progress and adjust web page to fit the view page?

I am using UIWebView to load a web page.

There are 3 questions:

1.It it possible to track the percentage progress when UIWebView is loading the page?

2.I noticed that when Safari loading a web page, the URL textfield displays a blue background progress indicator to tell user the percentage of loading a web page. What is the technology for this?

3.I know there is property scalesPageToFit

scalesPageToFit A Boolean value determining whether the webpage scales to fit the view and the user can change the scale.

I try to set it to YES, but it looks like that it is not in public API and my app stopped with black screen, I am not sure what is wrong?

To answer #1)

Instead of using a UIWebView, you can pull the webpage down as an NSData object using an NSURLConnection. When you get the initial response from your request from

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

the webserver should return a value of "expected content size" (which should be included in the response). Then you will keep getting the following method called each time you receive data:

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

Keep appending the data to an existing NSMutableData object. Then you can check the size of your current data object (NSMutableData.length) against the expected response size.

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

Then you can update a progress bar with that percentage! When

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

runs, use your data to call

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

and it will load everything you pulled down into your web view.

Re #3:

You can try specifying scalePagesToFit as a YES in the viewDidLoad event of the UIView that contains your webview, eg:

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

For cases where this doesn't work, refer to the following StackOverflow question: UIWebView does not scale content to fit where the asker (and subsequently, answerer) gave this solution.

Apparently you can use javascript to resize your page to fit the browser:

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

To answer question #1, there is a solution that is App Store safe, and uses a similar method as Webkit to track progress.

https://github.com/otium/OTMWebView

You can try to use this subclass of UIWebView which uses private UIWebView methods - therefore, this solution is not 100% AppStore safe (though some apps do almost 100% use it: Facebook, Google app, ...).

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM