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

标签 ios uiwebview uiscrollview

我在 UIScrollView 中有一个 UIWebView

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

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

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

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

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

enter image description here

enter image description here

最佳答案

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

想法 2:不要将 UIWebView 嵌入到 UIScrollView 中,而是嵌入到普通的 UIView 中。根据 Vignesh 的建议,通过委托(delegate)监听 webView 的内部 ScrollView 的 scrollViewDidScroll: 回调,分别检查 contentOffsetcontentSize 的高度调用回调的时间。一旦它们相等,就意味着你到了底部。一旦发生这种情况,您可以为工具栏的框架设置动画以“进入”包含的 UIView 并将 webView 的框架“推开”。

思路三:忽略苹果的建议,将UIWebView嵌入到UIScrollView中。根据 Vignesh 的建议,通过委托(delegate)监听 webView 的内部 ScrollView 的 scrollViewDidScroll: 回调,分别检查 contentOffsetcontentSize 的高度调用回调的时间。一旦它们相等,就意味着你到了底部。一旦发生这种情况,将 webView 的 userInteractionEnabled 属性设置为 NO,并在包含 webView 和工具栏的 scrollView 上将其设置为 YES。希望卷轴能够顺利进行。当然,您必须以相同的方式收听包含的 ScrollView ,以确定何时切换回 userInteractionEnabled

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

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

关于ios - 如何将 UIWebView 滚动转发到 UIScrollView ? (有条件的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7700972/

相关文章:

ios - 使用两个选项实现设置的 UI 最佳实践

swift - 运行时用户代理更改

ios - 在 UIScrollView 内滚动时,调整大小的 UIWebView 返回到原始大小

uiscrollview - react 原生 | ScrollView 从右到左

iphone - viewWillAppear subview

c++ - 有什么理由不使用 c++0x 进行 iOS 开发吗?

ios - Xcode 12.2 : Debugger not working with breakpoints

objective-c - RestKit:在 didLoadObjects 中了解请求是 POST 还是 PUT

ios - iOS中webView可以加载本地存储文件吗?

objective-c - 隐藏状态栏 : effect on bounds