Как установить viewport meta для iPhone, который правильно обрабатывает вращение?
поэтому я использую:
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;"/>
чтобы мой HTML-контент хорошо отображался на iPhone. Он отлично работает, пока пользователь
поворачивает устройство в ландшафтный режим, где дисплей остается ограниченным до 320px.
есть ли простой способ указать видовой экран, который изменяется в ответ на изменение пользователем
ориентация устройства? Или я должен прибегнуть к Javascript, чтобы справиться с этим?
9 ответов:
просто пытался разобраться в этом сам, и решение, которое я придумал, было:
<meta name="viewport" content="initial-scale = 1.0,maximum-scale = 1.0" />это, кажется, заблокировать устройство в масштабе 1.0 независимо от его ориентации. В качестве побочного эффекта он, однако, полностью отключает масштабирование пользователя (масштабирование Пинча и т. д.).
для тех, кто все еще заинтересован:
http://wiki.phonegap.com/w/page/16494815/Preventing-Scrolling-on-iPhone-Phonegap-Applications
на странице:
<meta name="viewport" content="user-scalable=no,width=device-width" />Это указывает Safari, чтобы предотвратить пользователь от масштабирования страницы с жестом "щипать" и фиксирует ширина порта представления к ширине экран, который всегда ориентирует айфон включен.
вы не хотите потерять опцию масштабирования пользователя, если вы можете помочь ему. Мне нравится это решение JS от здесь.
<script type="text/javascript"> (function(doc) { var addEvent = 'addEventListener', type = 'gesturestart', qsa = 'querySelectorAll', scales = [1, 1], meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : []; function fix() { meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1]; doc.removeEventListener(type, fix, true); } if ((meta = meta[meta.length - 1]) && addEvent in doc) { fix(); scales = [.25, 1.6]; doc[addEvent](type, fix, true); } }(document)); </script>
Я придумал слегка другой подход, который должен работать на кросс-платформах
http://www.jqui.net/tips-tricks/fixing-the-auto-scale-on-mobile-devices/
до сих пор я тестировал в on
Samsun galaxy 2
- Samsung galaxy s
- Samsung galaxy s2
- Samsung galaxy Note (но пришлось изменить css на 800px [см. ниже]*)
- Motorola
iPhone 4
@media screen and (max-width:800px) {это массивная губа вперед с мобильной разработкой ...
вы устанавливаете его так, чтобы он не мог масштабироваться (максимальный масштаб = начальный масштаб), поэтому он не может масштабироваться при повороте в ландшафтный режим. Установите maximum-scale=1.6, и он будет масштабироваться правильно, чтобы соответствовать ландшафтному режиму.
у меня была эта проблема, и я хотел, чтобы как можно было установить ширину, так и обновить ее при повороте и позволить пользователю масштабировать и масштабировать страницу (текущий ответ обеспечивает первый, но предотвращает последующий как побочный эффект).. поэтому я придумал исправление, которое сохраняет ширину вида правильной для ориентации, но все же позволяет масштабировать, хотя это не супер прямо вперед.
во-первых, добавьте следующий Javascript на веб-страницу, на которой вы находитесь отображение:
<script type='text/javascript'> function setViewPortWidth(width) { var metatags = document.getElementsByTagName('meta'); for(cnt = 0; cnt < metatags.length; cnt++) { var element = metatags[cnt]; if(element.getAttribute('name') == 'viewport') { element.setAttribute('content','width = '+width+'; maximum-scale = 5; user-scalable = yes'); document.body.style['max-width'] = width+'px'; } } } </script>затем в вашем - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)метод fromInterfaceOrientation добавьте:
float availableWidth = [EmailVC webViewWidth]; NSString *stringJS; stringJS = [NSString stringWithFormat:@"document.body.offsetWidth"]; float documentWidth = [[_webView stringByEvaluatingJavaScriptFromString:stringJS] floatValue]; if(documentWidth > availableWidth) return; // Don't perform if the document width is larger then available (allow auto-scale) // Function setViewPortWidth defined in EmailBodyProtocolHandler prepend stringJS = [NSString stringWithFormat:@"setViewPortWidth(%f);",availableWidth]; [_webView stringByEvaluatingJavaScriptFromString:stringJS];дополнительную настройку можно выполнить, изменив дополнительные настройки содержимого видового экрана:
Кроме Того, Я поймите, вы можете поставить прослушиватель JS для onresize или что-то вроде запуска масштабирования, но это сработало для меня, поскольку я делаю это из Cocoa Touch UI framework.
надеюсь, это кому-то поможет :)
<meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1">поддержка всех айфонов, всех айпадов, всех андроидов.
просто хочу поделиться, я играл с настройками видового экрана для моего адаптивного дизайна, если я установил максимальный масштаб до 0,8, начальный масштаб до 1 и масштабируемый до нет, то я получаю самый маленький вид в портретном режиме и вид iPad для ландшафта: D... это правильно уродливый хак, но он, кажется, работает, я не знаю, почему так я не буду использовать его, но интересные результаты
<meta name="viewport" content="user-scalable=no, initial-scale = 1.0,maximum-scale = 0.8,width=device-width" />наслаждайтесь :)
почему бы просто не обновить страницу, когда пользователь поворачивает экран с помощью JavaScript
function doOnOrientationChange() { location.reload(); } window.addEventListener('orientationchange', doOnOrientationChange);
Comments