Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIWebView landscape rotation does not fill view

I am having an issue with my UIWebView. When the view loads it loads in either orientation fine, fills the whole page perfectly etc.

However say if I load it in portrait then rotate the device the webview does not fill all the way across to the right hand side and I cannot for the life of me figure out why.

This is my view did load method

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib

    if  ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait){

        self.measurementsWebView.frame = CGRectMake(0, 0, 320, 367);

    }else if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight){

        self.measurementsWebView.frame = CGRectMake(0, 0, 480, 218);
    }

    NSString *path = [[NSBundle mainBundle] pathForResource:@"measurements" ofType:@"png"];
    [measurementsWebView loadHTMLString:[NSString stringWithFormat:@"<html><body><img src=\"file://%@\"></body></html>",path] baseURL:nil];
    measurementsWebView.scalesPageToFit = YES;

}

If i look in interface builder I am trying to find the panel that allows me to set expanding width or what ever you call it, but all I can see is this.

enter image description here

any help would be greatly appreciated

like image 774
HurkNburkS Avatar asked Jul 08 '12 23:07

HurkNburkS


2 Answers

Instead of setting the frame manually, you could also set the auto-resizing masks as:

measurementsWebView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

which will resize the webView in case you have no other elements on the screen (which, I take it, you don't have, from the values you've used when resizing measurementsWebView). Or, straight from the nib as shown in the following image:

auto-resize from nib

The masks can be set by clicking on the red bars in the box called Autosizing towards the bottom left.

like image 176
tipycalFlow Avatar answered Oct 27 '22 21:10

tipycalFlow


viewDidLoad is run once - when the view loads.

If you want to manually adjust the frame when rotation occurs, add code to to resize it in viewDidLayoutSubviews which is called whenever the view rotates.

-(void)viewDidLayoutSubviews {

    [super viewDidLayoutSubviews];

    self.measurementsWebView.frame = self.view.bounds;

}
like image 21
Aaron Wojnowski Avatar answered Oct 27 '22 21:10

Aaron Wojnowski