Enable zooming/pinch on UIWebView
Asked Answered
S

6

107

I have an UIWebView with a pdf-file. It works fine. But how can i enable zooming on the pdf-file?

Station answered 20/8, 2011 at 20:43 Comment(0)
S
233

Make sure you checked "Scales page to fit"

Schulze answered 7/9, 2011 at 10:19 Comment(3)
Do you have any suggestion regarding zooming performance on PDF? I have an annoying black effect on zooming.Diaconal
it enables zooming, but changes the initial scale factorSheehan
Work's but this cause problems with other things.. for example #33617717Carrick
M
46

you can use webView.scalesPageToFit=YES; programmatically

If you are using in xib than just click the check box "Scaling" scales Page to fit

Martyrdom answered 12/4, 2013 at 7:1 Comment(0)
Z
29

This Logic for zooming of UIWebView, no need to add UIWebView on UIScrollView

Well only problem with webView.scalesPageToFit = YES; is that, it will change initial content of font size but I found other option

Add <UIWebViewDelegate, UIScrollViewDelegate> to your .h file

Creation of your UIWebView.

self.mWebview = [[UIWebView alloc] init];
self.mWebview.delegate = self; /// set delegate method of UIWebView
self.mWebview.frame = CGRectMake(0, 35, self.view.bounds.size.width, self.view.bounds.size.height - 80); // set frame whatever you want..
[self.mWebview setOpaque:NO];
self.mWebview.backgroundColor = [UIColor clearColor];
[self.view addSubview:self.mWebview];

With load HTML file/content.

NSString* htmlString = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"File Name"ofType:@"html"] encoding:NSUTF8StringEncoding error:nil];
[self.mWebview loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];


#pragma mark -
#pragma mark - Webview Delegate Methods

- (void) webViewDidFinishLoad:(UIWebView *)webView
{
    webView.scrollView.delegate = self; // set delegate method of UISrollView
    webView.scrollView.maximumZoomScale = 20; // set as you want.
    webView.scrollView.minimumZoomScale = 1; // set as you want.

    //// Below two line is for iOS 6, If your app only supported iOS 7 then no need to write this.
    webView.scrollView.zoomScale = 2;
    webView.scrollView.zoomScale = 1;
}

#pragma mark -
#pragma mark - UIScrollView Delegate Methods

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
    self.mWebview.scrollView.maximumZoomScale = 20; // set similar to previous.
}

NOTE: I had to tested on Mac OS X - 10.9.3 with Xcode 5.1.1 and iOS version 6.1 and latter.

I hope this will helpful for you. :)

Zusman answered 31/5, 2014 at 14:33 Comment(2)
The scrollViewDidEndZooming wasn't needed for me to get zooming working correctly. Not sure what the intent of that code is as it just is resetting the same value that was set earlier to the exact same value!Enthusiast
Ya exactly, why is the scrollViewDidEndZooming part needed at all? But other than that, superb answer. It made even those pages zoom which were not getting zoomed by just setting the "Scales page to fit" property.Luis
S
25

I know this question is pretty old, but for everyone that is using a storyboard and prefers a visual answer here it is. Just check this box in the WebView's Attributes Inspector:

enter image description here

Sang answered 28/3, 2016 at 20:13 Comment(0)
M
18

If you want do by programmatically then use

webView.scalesPageToFit = true; 

If you are using storyboard then you have to tick check box "Scaling" scales Page to fit enter image description here

Mouth answered 31/3, 2017 at 20:14 Comment(0)
R
7

You MUST set scalesPageToFit=YES for any pinching and zooming to work on a UIWebView. It work for me.

Rodie answered 20/12, 2016 at 8:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.