【问题标题】:UIWebview won't zoom even after setting scalesPageToFit to YES即使将 scalesPageToFit 设置为 YES,UIWebview 也不会缩放
【发布时间】:2011-01-21 22:48:16
【问题描述】:

当用户选择UISegmentedControl 上的选项卡时,我有一个UIWebview 作为子视图加载。出于某种原因,我无法让它允许pinch/zooming。 我在viewDidLoad: 方法中设置了以下代码,所以它应该可以工作。

self.myWebView = [[[UIWebView alloc] initWithFrame:self.view.frame] autorelease];
self.myWebView.backgroundColor = [UIColor whiteColor];
self.myWebView.scalesPageToFit = YES;
self.myWebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
self.myWebView.delegate = self;
[self.view addSubview: myWebView];

我尝试从 NIB 加载 UIWebView 并以编程方式创建它,但无济于事。有什么我想念的吗?什么可能导致 webview 忽略捏合和缩放?

谢谢!

【问题讨论】:

标签: iphone uiwebview zooming subview


【解决方案1】:
  [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.zoom = 5.0;"];

似乎是合适的解决方案

【讨论】:

  • 太棒了!这就是我想要的。 +1
  • @Vaibhav Saran 当您捏住 WebView 并旋转设备时,它不起作用。
【解决方案2】:

我通过设置视口解决了这个问题:

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

祝你好运

【讨论】:

    【解决方案3】:

    我看到你正在设置autoresizingMask。这是否意味着您已经创建了初始大小为 CGRectZero 的 UIWebView ?您可以与文档进行交互吗?我的意思是,滚动/点击有效吗?

    【讨论】:

    • 我添加了一段我之前遗漏的代码。我试过删除 autoresizingMask 部分没有区别。是的,其他一切都很完美。
    • 试试不同的网页怎么样?排除您正在测试的页面有一些不允许捏合/缩放的配置。 (这可能受页面影响)
    • 你是对的。我只是加载维基百科页面,出于某种原因,它们不允许缩放。知道为什么他们不这样做吗?谢谢!
    • 不完全确定。我认为这是通过viewport 元数据完成的。检查developer.apple.com/safari/library/documentation/…
    【解决方案4】:

    根据我的经验,您需要在 UIWebView 加载之前设置 scalesPageToFit。这意味着在 viewDidLoad 等之前设置。我所做的是在“shouldStartLoadWithRequest”中设置它

    - (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
        //make sure that the page scales when it is loaded :-)
        theWebView.scalesPageToFit = YES;
        return YES;
    }
    

    我对文档的解释是 scalesPageToFit 属性决定了页面的加载方式。它不会在事后改变事情。

    希望这会有所帮助。

    【讨论】:

      【解决方案5】:

      仅供参考:

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

      有效但

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

      不适用于 iPhone。文档说使用是/否。我想在这种情况下案件很重要。在 obj-c 中,值为 YES/NO 和 1/0

      【讨论】:

        【解决方案6】:

        您必须启用多点触控。捏合在屏幕上涉及多个手指:

        [myWebView setMultipleTouchEnabled:YES]

        【讨论】:

        • 这不是问题。默认情况下启用多点触控。维基百科移动网站中似乎有某种代码阻止它放大。它在所有其他网站上都可以正常工作。
        【解决方案7】:

        这是 Apple 在 webview 类参考中建议的内容。

        重要提示:您不应在 UIScrollView 对象中嵌入 UIWebView 或 UITableView 对象。如果这样做,可能会导致意外行为,因为这两个对象的触摸事件可能会混淆和错误处理。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-20
          • 2015-07-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多