Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIWebView's property scalesPageToFit = YES not working correctly on larger images

In an iphone app i have a webview in which i want to preview some image downloaded from internet, my problem is that the some images are not viewed as to fit in the frame of webview, but most do. I think this is due to the fact that those images are too large. Am i doing something wrong? Please help

What i want is simply loading image in webview to fit the frame of webview. You can provide me some other code, but need to be regarding webview not imageview.

Here is the code i am using.

self.documentData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.folio3.com/corp/wp-content/uploads/2013/02/Entrance_A-3.jpg"]];
self.webView.scalesPageToFit = YES;
[self.webView loadData:self.documentData MIMEType:@"image/jpeg" textEncodingName:@"utf-8" baseURL:nil];

Plus here is the screenshot of output (clearly shows scroll indicators i-e image is not fit in webview's frame)Output Screenshot

like image 873
iMemon Avatar asked May 22 '13 05:05

iMemon


2 Answers

This solution builds on the answer from Ammar Hasan. Instead of the original...

NSData *data = [NSData dataWithContentsOfURL:imageURL];
[self.webView loadData:data MIMEType:@"image/jpeg" textEncodingName:@"utf-8" baseURL:nil];

...you can do this:

NSString *photoWrapper = [NSString stringWithFormat:@"\
 <html>\n\
    <head>\n\
        <meta name=\"viewport\" content=\"width=device-width\" />\n\
        <style type=\"text/css\">\n\
            body {\n\
                margin: 0;\n\
                padding: 0;\n\
            }\n\
            img {\n\
                width: 100%%;\n\
            }\n\
        </style>\n\
    </head>\n\
    <body>\n\
        <img src=\"%@\" />\n\
    </body>\n\
</html>\
", URL];
[self.documentView loadHTMLString:photoWrapper baseURL:nil];

Now the image is scaled to the width of the web view, even when the web view is less than half the width of the image, which seems to be a limit that UIWebView imposes otherwise. The image can still be scaled by the user, which I wanted. You can override that by adding minimum-scale and maximum-scale to the viewport meta tag.

like image 29
arlomedia Avatar answered Sep 21 '22 18:09

arlomedia


First Check and set frame of UIWebView in viewDidLoad: like bellow..

webView.frame = self.view.frame;

after use this Delegate method and set scalesPageToFit property like bellow..

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    webView.scalesPageToFit = YES;//set here
    return YES;
}
like image 122
Paras Joshi Avatar answered Sep 18 '22 18:09

Paras Joshi