ios – 如何将UIWebView转发到UIScrollView? (有条件的)

我在UIScrollView中有一个UIWebView.

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

IPhone Safari浏览器具有完全相同的功能.

看到屏幕截图(第一个)我得到的默认行为 – 我猜是因为:滚动消息由webview消耗,因为触摸/滚动直接发生在webview区域.

我想在这里做的是programatiicaly决定何时将’向上滚动’转发到UIScrollivew以及何时不转发.

有关如何解决这个问题的任何提示都会非常有用.谢谢!!

最佳答案
UIWebView class reference不鼓励在UIScrollView中嵌入UIWebView:

Important: You should not embed UIWebView or UITableView objects in
UIScrollView objects. If you do so, unexpected behavior can result
because touch events for the two objects can be mixed up and wrongly
handled.

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

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

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

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

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

两种变体都有缺点,在某些情况下,你将无法做点击链接之类的事情:-(但也许这对你的情况来说已经足够了.至少在第一个变种中它并不是那么糟糕.

转载注明原文:ios – 如何将UIWebView转发到UIScrollView? (有条件的) - 代码日志