如何在 UIScrollView 内的 UIWebView 上启用放大?

我有一个 UIWebView的内部 UIScrollView(scrollview 包含另一个组件)

我试过在 Interface BuilderUIWebView上同时启用多点触摸,但它仍然不能放大 html,我是否需要同时处理 UIScrollViewUIWebView的放大?或者任何我没有设置的东西?

76077 次浏览

您需要在控制器中实现 viewForZoomingInScrollView 方法,否则缩放不会起到任何作用。(我真的不知道为什么需要这样做,但你看吧。)

有关详细信息,请参阅 http://developer.apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html

必须设置 scalesPageToFit = YES 才能在 UIWebView 上工作

好的,您需要同时执行以上两项操作,还需要执行以下操作。我在主视图中有一个网页视图,但是没有用。

  1. 如上所述,您首先必须将 UIScrollView 放在主视图中,然后将 Web 视图放在滚动视图中。
  2. 如上所述,在视图控制器中实现 <UIScrollViewDelegate>,在 Interface Builder 中将滚动视图委托拖动到视图控制器中,然后实现 viewForZoomingInScrollView方法。这必须返回指向 UIScrollView (返回 myScrollView)的指针。
  3. 我为 web 视图和滚动视图创建了 IBOutlet 属性——在 NIB 中将它们链接到视图控制器。
  4. 在滚动视图中,进入属性检查器,设置最大和最小缩放因子(我设置了0.5到5.0,这样很好)。
  5. 在 Web 视图中,在属性检查器中:
  6. 在 Web 视图部分,选择 Scales Pages To Fit
  7. 在“视图”部分,选择“模式”,“左上角”
  8. 在底部的视图部分,勾选启用用户交互和多点触摸

使用 JavaScript 可以控制缩放级别,尽管我找到的唯一解决方案看起来并不流畅。

假设你在 <head>:

<meta id="vp" name="viewport" content="width=768,initial-scale=1.0">

若要缩放到4倍,并仍然允许用户更改缩放,请将内容更改两次:

var vp = document.getElementById('vp');
vp.content = "width=767,minimum-scale=4.0,maximum-scale=4.0,user-scalable=yes";
vp.content = "width=768,minimum-scale=0.25,maximum-scale=10.0,user-scalable=yes";

切换宽度是非常重要的-否则移动 Safari 有严重的重新绘制错误(由于过度优化)。

您不能只是设置 initial-scale再次-它被忽略的第二次。