Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 214
arachide Avatar asked Apr 01 '10 13:04

arachide


2 Answers

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.

like image 121
Pyro2927 Avatar answered Sep 18 '22 09:09

Pyro2927


Re #3:

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

- (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];
like image 36
Jon Limjap Avatar answered Sep 21 '22 09:09

Jon Limjap