问题
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.
any help would be greatly appreciated
回答1:
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:
The masks can be set by clicking on the red bars in the box called Autosizing towards the bottom left.
回答2:
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;
}
回答3:
In interface builder, the drop-down menu where it says 'Layout Rectangle', click it and select 'Frame Rectangle'.
Alternatively you could override the willAnimateRotationToInterfaceOrientation:
method in your view controller and set the co-ordinates/size manually as you have done in viewDidLoad
.
来源:https://stackoverflow.com/questions/11387467/uiwebview-landscape-rotation-does-not-fill-view