uiwebview не изменяет размер после изменения ориентации на альбомную

Я пишу приложение для iPhone, в котором у меня есть UIWebView, загружающий веб-сайт с адаптивным дизайном.

Проблема, с которой я сталкиваюсь, заключается в том, что я поворачиваю устройства в альбомную ориентацию: UIWebView вращается, но сохраняет ту же ширину, что и в портретном режиме.

Я провел последние 5 часов в поисках по всей сети, я нашел несколько решений, которые использовал, но безуспешно ...

на моей html-странице я использую

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

я пробовал использовать

<meta name="viewport" content="width=device-width" />

ничего не изменилось, в моем коде я реализую следующую функцию для обработки поворота, но она ничего не дает

- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation)fromInterfaceOrientation
{
    [self.myWebView stringByEvaluatingJavaScriptFromString:
    [NSString stringWithFormat:
    @"document.querySelector('meta[name=viewport]').setAttribute('content', 'width=%d;', false); ",
    (int)self.myWebView.frame.size.width]];

    NSLog(@"orientation width: %d", (int)self.myWebView.frame.size.width);

}

Я также установил флажок "Масштабировать страницу по размеру",

(с использованием xcode 5, с iphone4s и ios7)


person CodeLion    schedule 27.09.2013    source источник


Ответы (2)


Попробуйте установить ограничения для UIWebView. При повороте представления ограничения пространства должны автоматически регулироваться.

В раскадровке найдите значки меню в правом нижнем углу. Выберите значок автоматической компоновки (выглядит как борьба с ничьей), а затем выберите либо «Добавить отсутствующие ограничения», либо «Сбросить до рекомендованных ограничений». введите описание изображения здесь

person Scotty    schedule 29.09.2013
comment
Отлично работает на устройствах IOS (Добавить отсутствующие ограничения). Симулятор также вращается, но, кажется, немного запутался (работают только три из четырех вращений). Мне не нужно использовать Objective C. - person Michael Biermann; 20.11.2013
comment
Я не уверен, почему, но указание «вверх ногами» на странице общей информации о развертывании или в списке проектов, похоже, не работает. Я всегда добавляю этот метод к своему главному контроллеру представления, чтобы решить эту проблему, а также чтобы убедиться, что поддерживаются все другие ориентации: - (NSUInteger)supportedInterfaceOrientations { return (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown); } - person Scotty; 22.11.2013
comment
Поскольку iPhone не позволяет пользователям блокировать ориентацию в альбомном режиме, портретный перевернутый режим выполняет эту функцию. Однако на iPad вы, вероятно, обнаружите, что перевернутый портретный режим действительно работает так, как ожидалось. Предлагается просто придерживаться этих значений по умолчанию, если у вас нет конкретного варианта использования, который оправдывает что-то другое. - person ogoldberg; 03.02.2014
comment
+1 за ссылку на тай-файтер, а также за то, что ваше решение сработало, спасибо. - person Mike Purcell; 17.07.2014

наконец, это решило мою проблему

- (void)willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
   [self.myWebView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
}
person CodeLion    schedule 28.09.2013
comment
Это правильный ответ, если вы делаете это программно. - person user-44651; 15.11.2016