Ориентация UIWebView всегда «портретная» на iPad2

#javascript #ios #uiwebview

#javascript #iOS #uiwebview

Вопрос:

У меня есть хорошо работающий веб-сайт HTML5 с некоторым JavaScript. Эта страница вызывается в UIWebView. Страница запускает некоторый JavaScript, чтобы проверить, находится ли iPad в портретном или альбомном режиме.

И вот в чем проблема. Не имеет значения, находится ли iPad в альбомном или портретном режиме, вызов функции:

 orientationObserver.getOrientation()
  

всегда возвращает «портрет».

Это известная проблема, или я делаю что-то не так? Я установил представление, содержащее UIWebView, в ландшафтный режим с помощью:

 - (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation==UIInterfaceOrientationLandscapeLeft);
}
  

я делаю:

 alert(orientationObserver.getOrientation()
  

в JS, и он всегда возвращает «Портрет», устройство (и, следовательно, приложение) работает в альбомной ориентации.

Ответ №1:

Вы можете указать стили CSS на основе ориентации окна просмотра: настроить браузер с body[orient="landscape"] or body[orient="portrait"]

Однако подход Apple к этой проблеме заключается в том, чтобы позволить разработчику изменять CSS на основе изменения ориентации, но не полностью предотвращать переориентацию. Я нашел аналогичный вопрос здесь.

Комментарии:

1. Дело в том, что я не могу что-то изменить в загруженном коде HTML / CSS / JS. Код генерируется другим программным обеспечением и «только» должен отображаться в UIWebView на iPad. Если я открываю HTML в Safari, все работает как по маслу.

2. Мои тесты на iPhone и iPad не показывают body[orient="landscape"] , что правило CSS имеет какой-либо эффект. Скорее, есть пример Джо Хьюитта ( web.archive.org/web/20100408142542/http://www.joehewitt.com /… ), который использует Javascript для установки атрибута ‘orient’, чтобы заставить этот метод работать. Подразумевается, что вы можете указывать правила CSS на основе ориентации без этого Javascript, неверно, хотя это повторяется в нескольких местах. (Возможно, раньше это работало, или, может быть, каждое из этих мест скопировало его из другого места без тестирования.)