【问题标题】:how to forward UIWebView scroll to UIScrollView ? (conditionally)如何将 UIWebView 滚动转发到 UIScrollView ? (有条件的)
【发布时间】:2011-12-03 19:09:25
【问题描述】:

我在 UIScrollView 中有一个 UIWebView

这个想法是当用户向上滚动网页时能够在屏幕上创建更多阅读空间 - 通过向上滚动 UIScrollView 直到工具栏可见,显然当工具栏不再可见时,实际上滚动网页以显示页面上的更多内容。

iPhone Safari 浏览器的功能完全相同。

查看屏幕截图(第一个)以了解我得到的默认行为 - 我猜是因为:滚动消息被 webview 消耗,因为触摸/滚动直接发生在 webview 区域上。

我想在这里做的是编程决定何时将“向上滚动”转发到 UIScrollivew 以及何时不转发。

有关如何解决此问题的任何提示都会非常有帮助。谢谢!!

【问题讨论】:

    标签: ios uiwebview uiscrollview


    【解决方案1】:

    UIWebView class reference 不鼓励在 UIScrollView 中嵌入 UIWebView:

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

    但是我想你仍然想实现你的功能;-)

    想法一:不要将 UIWebView 嵌入到 UIScrollView 中,而是使用 UIWebView 的stringByEvaluatingJavaScriptFromString: 方法运行 javascript,修改 DOM 以在下方添加工具栏。如果需要,您可以通过注册一些自定义 URL 方案从工具栏上的任何按钮回调 Objective-c 代码。

    想法2:不要将UIWebView嵌入到UIScrollView中,而是嵌入到普通的UIView中。基于 Vignesh 的建议,通过委托侦听 webView 的内部 scrollView 的 scrollViewDidScroll: 回调,每次调用回调时检查 contentOffsetcontentSize 的高度。一旦他们相等,这意味着你已经到了谷底。一旦发生这种情况,您可以为工具栏的框架设置动画以“进入”包含 UIView 并将 webView 的框架“推开”。

    想法3:忽略Apple的建议,将UIWebView嵌入到UIScrollView中。基于 Vignesh 的建议,通过委托侦听 webView 的内部 scrollView 的 scrollViewDidScroll: 回调,每次调用回调时检查 contentOffsetcontentSize 的高度。一旦他们相等,这意味着你已经到了谷底。一旦发生这种情况,将 webView 的 userInteractionEnabled 属性设置为 NO,并在包含 webView 和工具栏的 scrollView 上将其设置为 YES。希望滚动将继续顺利进行。当然,您必须以相同的方式收听包含滚动视图以确定何时切换回userInteractionEnabled

    这个想法的一个变体是只为 webView 将userInteractionEnabled 设置为 NO,但将 webView 的框架高度设置为与其 contentSize 相匹配,并相应地放大包含 scrollView 的 contentSize。

    这两种变体都有缺点,在某些情况下您将无法执行诸如单击链接之类的操作 :-( 但这对您的情况来说已经足够了。至少在第一个变体中还不错。

    【讨论】:

      【解决方案2】:

      您可以在 UIscrollview 的下方添加搜索框和 uiwebview。要在 webview 滚动时获取内容偏移量,可以使用以下代码 sn-p。

      UIScrollView* currentScrollView;
      for (UIView* subView in testWebView.subviews) {
          if ([subView isKindOfClass:[UIScrollView class]]) {
              currentScrollView = (UIScrollView*)subView;
              currentScrollView.delegate = (id)self;
          }
      }
      

      现在您可以将基本滚动视图偏移的 y 值更改为您从滚动视图 didscroll 委托方法获得的偏移值。

      【讨论】:

        【解决方案3】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-18
          • 1970-01-01
          • 2011-07-11
          • 1970-01-01
          • 1970-01-01
          • 2010-12-25
          相关资源
          最近更新 更多