如何获取 UIScrollView 中滚动的 contentOffset?

Posted

技术标签:

【中文标题】如何获取 UIScrollView 中滚动的 contentOffset?【英文标题】:How to get the contentOffset of a UIScrollView mid-scroll? 【发布时间】:2012-02-26 16:50:04 【问题描述】:

当用户仍在滚动时,如何获取有关 UIScrollView 的 contentOffset 或类似信息?例如,如果我想将图像作为标题放置在 UIWebView 内容的正上方,而不是图像作为 WebView 的滚动视图的一部分,但在用户滚动时让它更新,而不仅仅是在他们松开后跳转到该位置。我该怎么做呢?

【问题讨论】:

【参考方案1】:

ios 5 中,UIWebView 有一个 scrollView 属性,它是负责处理滚动的 UIScrollView。在 iOS 5 之前,您可以使用 [subview isKindOfClass:[UIScrollView class]]UIWebView 的 subviews 属性中搜索子视图。

一旦你有了UIScrollView,你就可以设置它的委托属性。然后,在代理中,您可以在用户滚动时响应 scrollViewDidScroll: 消息,并更新标题视图的位置/内容。

添加:2012 年 2 月 29 日 - 为了保留 UIWebView 的功能,您还需要将拦截的 UIScrollViewDelegate 方法转发到 UIWebView。为此,您可以在协议中所有强制方法的末尾调用 UIWebView,并为可选协议方法实现类似 forwardInvocation:forwardingTargetForSelector 的内容。这将保留您原来的 UIWebView 行为,并允许您使用自己的逻辑来增强它。

【讨论】:

当我实现这个时,我可以得到所描述的 contentOffset,但是缩放被搞砸了。我注释掉了“webview.scrollView.delegate = self;”并且缩放是固定的。有什么想法吗? @Greg 正如我在回答中所说,您不能使用UIWebView 来执行此操作。如果您将自己设置为UIWebViewUIScrollView 的代表,那么您就是在践踏UIWebView。做不到。 然后在完成您需要做的事情后将所有委托调用转发到 webview 本身。 IE。将自己保持为委托,然后在委托方法中向 webview 发送相同的消息和参数。【参考方案2】:

为什么不能将标题作为单独的视图放在UIWebView 上方?为什么它必须是子视图?

【讨论】:

它没有。我不知道你从哪里得到的。

以上是关于如何获取 UIScrollView 中滚动的 contentOffset?的主要内容,如果未能解决你的问题,请参考以下文章

快速禁用 UIScrollView 中的垂直滚动?

滚动后如何获取 UIScrollView 的 CGRect?

如何从 UIScrollView 获取 UIButton 位置

如何通过手指获取 UIScrollView 分页?

将多个容器视图放在 ios 中的分页 UIScrollView 中

UIViewController 中的滚动标题