2013-09-27 4 views
9

Я кодирую приложение iPhone, в котором у меня есть UIWebView, который загружает веб-сайт с отзывчивым дизайном.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)

ответ

27

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

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

+0

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

+0

Я не уверен, почему, но указание «Upside Down» на странице «Общая информация о развертывании» или в плане проекта, похоже, не работает. Я всегда добавляю этот метод к своему основному контроллеру представления, чтобы позаботиться об этой проблеме, а также обеспечить поддержку всех других ориентаций: '- (NSUInteger) supportedInterfaceOrientations { return (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown); } ' – Scotty

+0

Поскольку iPhones не позволяют пользователям блокировать ориентацию в ландшафтном режиме, функция« портрет вверх-вниз »служит для этой функции. Однако на iPads вы, скорее всего, обнаружите, что портретный перевернутый режим работает, как и ожидалось. Предлагается просто придерживаться этих значений по умолчанию, если у вас нет конкретного варианта использования, чтобы оправдать что-то другое. – ogoldberg

11

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

- (void)willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [self.myWebView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
} 
+0

Это правильный ответ, если вы делаете это программно. –

Смежные вопросы