Ios 如何将UIWebView滚动转发到UIScrollView?(有条件地)

Ios 如何将UIWebView滚动转发到UIScrollView?(有条件地),ios,uiwebview,uiscrollview,Ios,Uiwebview,Uiscrollview,我有一个UIWebView内部UIScrollView 这个想法是当用户向上滚动网页时,能够在屏幕上创建更多的阅读空间——通过向上滚动UIScrollView直到工具栏可见,显然,当工具栏不可见时,实际滚动网页以显示页面上的更多内容 IPhone Safari浏览器的功能与此完全相同 查看屏幕截图(第一个)了解我得到的默认行为-我猜是因为:滚动消息被webview使用,因为触摸/滚动直接发生在webview区域 我想在这里做的是通过编程决定何时将“向上滚动”转发到UIScrollivew,何时不

我有一个UIWebView内部UIScrollView

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

IPhone Safari浏览器的功能与此完全相同

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

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

任何关于如何解决这个问题的建议都会非常有用。谢谢


您可以在UIscrollview中逐个添加搜索框和uiwebview。要在滚动webview时获取内容偏移量,可以使用以下代码段

UIScrollView* currentScrollView;
for (UIView* subView in testWebView.subviews) {
    if ([subView isKindOfClass:[UIScrollView class]]) {
        currentScrollView = (UIScrollView*)subView;
        currentScrollView.delegate = (id)self;
    }
}
现在,您可以将基本scrollview偏移量的y值更改为从scrollview didscroll委托方法获得的偏移量值

不建议在UIScrollView中嵌入UIWebView:

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

但是,我认为您仍然希望实现您的功能;-)

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

Idea 2:不要将UIWebView嵌入到UIScrollView中,而是嵌入到普通UIView中。在Vignesh的建议的基础上,通过代理倾听webView的内部scrollView的
scrollViewDidScroll:
回调,每次调用回调时检查
contentOffset
contentSize
的高度。一旦它们相等,就意味着你已经到了底部。一旦发生这种情况,您可以设置工具栏框架的动画,以“进入”包含的UIView并“推”webView的框架

Idea 3:忽略苹果的建议,将UIWebView嵌入到UIScrollView中。在Vignesh的建议的基础上,通过代理倾听webView的内部scrollView的
scrollViewDidScroll:
回调,每次调用回调时检查
contentOffset
contentSize
的高度。一旦它们相等,就意味着你已经到了底部。一旦发生这种情况,请将webView的
userInteractionEnabled
属性设置为NO,并在包含webView和工具栏的scrollView上将其设置为YES。希望这卷卷轴能足够顺利地继续下去。当然,您必须以相同的方式收听包含滚动视图,以确定何时切换回
userInteractionEnabled

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


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

高级滚动视图技术