76

所以我一直在使用:

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;"/>

让我的 HTML 内容在 iPhone 上很好地显示。在用户将设备旋转到横向模式之前,它的效果很好,显示仍然限制在 320 像素。

有没有一种简单的方法来指定视口而变化以响应用户更改设备方向?还是我必须求助于 Javascript 来处理它?

4

9 回答 9

108

只是想自己解决这个问题,我想出的解决方案是:

<meta name="viewport" content="initial-scale = 1.0,maximum-scale = 1.0" />

这似乎将设备锁定为 1.0 比例,无论其方向如何。但是,作为副作用,它确实完全禁用了用户缩放(捏缩放等)。

于 2010-06-03T04:03:19.183 回答
18

对于任何仍然感兴趣的人:

http://wiki.phonegap.com/w/page/16494815/Preventing-Scrolling-on-iPhone-Phonegap-Applications

从页面:

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

这指示 Safari 阻止用户使用“捏合”手势放大页面,并将视口的宽度固定为屏幕的宽度,即 iPhone 所处的方向。

于 2011-01-06T07:02:19.393 回答
10

如果您能提供帮助,您不希望失去用户缩放选项。我喜欢这里的 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>
于 2011-11-14T09:29:14.247 回答
2

您将其设置为无法缩放(最大缩放 = 初始缩放),因此当您旋转到横向模式时它无法缩放。设置 maximum-scale=1.6 它将正确缩放以适应横向模式。

于 2009-08-07T00:24:14.947 回答
2

我想出了一个稍微不同的方法,应该可以在跨平台上工作

http://www.jqui.net/tips-tricks/fixing-the-auto-scale-on-mobile-devices/

到目前为止,我已经测试过

三星银河2

  • 三星银河s
  • 三星银河 s2
  • 三星 Galaxy Note(但必须将 css 更改为 800px [见下文]*)
  • 摩托罗拉
  • iPhone 4

    • @media screen and (max-width:800px) {

这是移动开发的一大进步……

于 2012-11-05T11:45:11.183 回答
1

我自己也遇到了这个问题,我希望既能设置宽度,又能在旋转时更新它,并允许用户缩放和缩放页面(当前答案提供了第一个但防止后者作为副作用).. 所以我想出了一个修复程序,可以使视图宽度保持正确的方向,但仍然允许缩放,尽管它​​不是超级直截了当。

首先,将以下 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];

可以通过修改更多视口内容设置来完成额外的调整:

http://www.htmlgoodies.com/beyond/webmaster/toolbox/article.php/3889591/Detect-and-Set-the-iPhone--iPads-Viewport-Orientation-Using-JavaScript-CSS-and-Meta-Tags .htm

另外,我知道您可以为 onresize 放置一个 JS 侦听器或类似的东西来触发重新缩放,但这对我有用,因为我是从 Cocoa Touch UI 框架中做的。

希望这可以帮助某人:)

于 2011-03-15T00:39:38.120 回答
0
<meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1">

支持所有 iphone、所有 ipad、所有 android。

于 2014-02-11T07:38:30.013 回答
-1

只是想分享一下,我已经尝试过响应式设计的视口设置,如果我将最大比例设置为 0.8,初始比例设置为 1 并缩放为无,那么我会在纵向模式和 iPad 视图中获得最小的视图对于景观:D ...这确实是一个丑陋的黑客,但它似乎有效,我不知道为什么,所以我不会使用它,但有趣的结果

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

请享用 :)

于 2013-04-01T14:33:18.120 回答
-2

当用户使用javascript旋转屏幕时,为什么不重新加载页面

function doOnOrientationChange()
{
location.reload();
}

window.addEventListener('orientationchange', doOnOrientationChange);
于 2015-01-12T16:41:06.333 回答