UIScrollview中的UIWebview向scrollview发送垂直滚动事件

Posted

技术标签:

【中文标题】UIScrollview中的UIWebview向scrollview发送垂直滚动事件【英文标题】:UIWebview in UIScrollview send vertical scroll event to scrollview 【发布时间】:2013-07-29 10:03:57 【问题描述】:

所以我有一个仅用于水平滚动的 UIWebView,而它位于仅用于垂直滚动的 UIScrollView 中。我几乎可以做到这一点,但我有一个小问题。

UIWebiew 的滚动内容高度设置为 webviews 框架的高度,因此它不会垂直滚动,但即使是这种情况,它似乎仍然会消耗垂直滚动事件(有时),因为我可以看到侧滚动条显示,但它不会滚动(并且不会滚动包含 webview 的滚动视图)。

之所以需要这样,是因为有些元素需要随 webview 垂直滚动,而不是水平滚动(想想 safari 应用程序的地址栏如何随 webview 滚动)

有谁知道我将如何传递垂直滚动事件但保留 UIWebView 的水平滚动事件?

我查看了this answer,但它并不是我想要的

更新:

所以通常在我提出问题后,我会在另一个问题上找到合适的答案...(现在已经搜索了几个小时)this answer 应该为我解决问题,我试一试并报告

【问题讨论】:

【参考方案1】:

刚刚设置

scrollView.alwaysBounceVertical = NO;
scrollView.contentSize = CGSizeMake(
    scrollView.frame.size.width, scrollView.contentSize.height);
scrollView.showsVerticalScrollIndicator = NO;

编辑: 似乎不起作用。太惨了。。

尝试实施

- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gst 
    shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)gst2 
    return YES;

..在你的视图中包含 scrollView 和 webView,甚至是 scrollView 本身(包含 webView)。

【讨论】:

嘿,是的,这就是我目前所拥有的,尽管它实际上无法滚动,但它仍然消耗垂直滚动事件,这是问题【参考方案2】:

所以我发现我在问题中发布的解决方案大部分都有效,它完全符合我的需要,但由于某种原因,在网页加载后,它会将标题栏滚动到仅显示网页,这不是结束世界的,但它不漂亮。似乎事件在webViewDidFinishLoad: 之后触发,所以我不能将它重新定位到顶部。生病继续修补,也许我能找出它为什么这样做。

【讨论】:

我通过将它放在 UIView 动画中来处理跳出屏幕的标题,这样它就会在屏幕外制作动画而不是立即跳出(显然,当 webviews 自动将其内容偏移设置为 0,0页面加载完毕) 我还有一个问题,在将子视图添加到 webview 的滚动视图后,一半的网页将无法点击,我通过在位置 0 插入子视图来修复它(因此它位于视图层次结构的后面) ,不知道为什么它有效,但确实有效。

以上是关于UIScrollview中的UIWebview向scrollview发送垂直滚动事件的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 中的 UIImageView 和 UIWebView

UIWebView 中的 UIScrollView 的委托方法未调用水平滚动

UIScrollView 内的 UIWebView 并滚动到 Web 视图中的选定字段

带有嵌入式 UIWebView 的 UIScrollView 在按住后不滚动

将一页 UIScrollView 保存到图像

UIWebView 在 UIScrollView 内消耗触摸事件