向 UIWebView 添加动画顶栏

Posted

技术标签:

【中文标题】向 UIWebView 添加动画顶栏【英文标题】:Add an animated top bar to UIWebView 【发布时间】:2011-04-11 15:14:35 【问题描述】:

我有一个加载网页的 UIWebView 控制器,我想在页面顶部添加某种带有刷新和关闭按钮的栏。 该栏应在页面加载时隐藏,并在用户点击页面顶部时再次显示。

有谁知道如何处理它?有什么简单的方法吗?

更新: 我想我对这个问题还不够清楚,所以这里有一些澄清: 1. 应用程序是标准应用程序,其中一个流程打开加载网页的 UIWebView 2. 我正在寻找的是一个将在网页顶部向下滑动的栏(在 UIWebView 中加载),应该可以帮助用户克服由于某种原因未加载网页的情况 3.栏应该按住后面(只关闭UIWebView)和刷新(重新加载UIWebView)操作。

希望对您有所帮助。

谢谢, 希米克斯

【问题讨论】:

我实际上正在研究使用这样的东西的东西。我很乐意分享。如果需要,请与我联系。 感谢摩西!会尽快与您联系... 你可以在Meta Tavern找到我,或者我的联系信息在我的网站上,但你必须在那里挖掘。 【参考方案1】:

我现在正在做类似的事情,到目前为止,这就是我想出的。其中一些可能很明显,但很重要:

您的地址栏应该在左边navigationItem。 搜索栏是navigationItem。 在 URL 框中开始/结束编辑时,您应该为取消按钮设置动画。 Safari Mobile 使用navigationBarPrompt 属性来显示网页标题。 要为搜索/URL 栏的宽度设置动画,请在选择栏时使用UIView 动画。

【讨论】:

【参考方案2】:

使用 UIBarButtonItems 在 webview 上方添加 UIToolbar 非常简单,该 UIBarButtonItems 调用 webview 的刷新、后退和前进方法。您还可以将 webviewdelegate 方法添加到您的视图控制器中,以检测页面何时完成加载并以这种方式隐藏/显示工具栏。

如果您希望刷新和导航控件显示为 webview 本身的 html 内容的一部分,那就有点小技巧了,但并非不可能。您可以使用 webview 的 shouldLoadRequest 委托方法来检测这些按钮是否已被点击,然后在您的视图控制器中采取适当的操作。隐藏和显示导航栏必须在 javascript 中处理。

【讨论】:

谢谢,但我不确定在这种情况下将栏放在页面上方是否会对我有所帮助。此外,后退按钮实际上应该只是关闭 UIWebView,而刷新按钮应该重新加载 UIWebView。你怎么看? 如果您使用 UIWebViewDelegate 方法,那么您可以拦截在 webview 中发出的请求。因此,在您的网页内容栏中,使用 href="webview_go_back" 或类似的内容创建后退按钮图像链接,然后在 webViewShouldStartRequest 委托方法中,检查请求 URL 中的“webview_go_back”,您将能够告诉用户何时点击了 web 视图中的后退按钮。然后做任何你想做的事,关闭webview,无论如何。这有意义吗? 是的,我实际上在网页中实现了“返回”按钮以指向特殊的 URL 并使用委托方法处理它。但是如果网页本身根本没有加载会发生什么?在这种情况下,网页中的“返回”按钮不会显示...用户如何返回应用程序? 有一个 webview 委托方法可以检测页面何时加载失败 (didFailLoadWithError),您可以使用该方法检测并返回应用程序。【参考方案3】:

除非我缺少这样做的库/项目,否则我认为没有简单的方法可以做到这一点。

我已经编写了类似于 Safari 移动地址栏的代码,根据记忆,它涉及使用私有 api 和/或玩 “不是那么私密,但使用风险自负” @987654321 @子视图层次结构...

【讨论】:

是的,我就是这么想的……我想知道为什么没有简单的方法,因为这似乎是一个常见的请求(尽管仍然很难找到解决方案……)。跨度>

以上是关于向 UIWebView 添加动画顶栏的主要内容,如果未能解决你的问题,请参考以下文章

如何查找未记录版本的 handleGesture 选择器(用于 UIWebView)需要啥样的参数?

如何实现所有子视图的滚动

使用WKWebView替换UIWebView

如何向自定义 UIWebview 添加“打开方式”功能?

如何清除/禁用 UIWebView 的浏览历史记录

在 xib 上更改小部件的类? (将 UIWebView 更改为我自己的 UIWebView 类别)