UIWebView landscape rotation does not fill view

Refresh

December 2018

Views

5.2k time

5

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

3 answers

3

viewDidLoad выполняется один раз - когда вид нагрузки.

Если вы хотите вручную настроить кадр , когда происходит вращение, добавление кода , чтобы изменить его размер в viewDidLayoutSubviewsкотором вызывается всякий раз , когда вид вращается.

-(void)viewDidLayoutSubviews {

    [super viewDidLayoutSubviews];

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

}
1

В интерфейсе строитель, выпадающее меню, где написано «Layout Прямоугольник», нажмите на нее и выберите «Кадр Прямоугольник».

В качестве альтернативы вы можете переопределить willAnimateRotationToInterfaceOrientation:метод в контроллере представления и установить координаты / размер вручную , как вы сделали в viewDidLoad.

4

Вместо того чтобы устанавливать рамку вручную, вы можете также установить автоматическое изменение размера маски, как:

measurementsWebView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

который будет изменять размер WebView в случае , если нет других элементов на экране (который, как я понимаю, вы не имеете, от значений , которые вы уже использовали при изменении размера measurementsWebView). Или, прямо из кончика пера , как показано на следующем рисунке:

автоматическое изменение размера от кончика пера

Маски можно установить, нажав на красных баров в коробке под названием Autosizing к левой нижней части .