如何获取 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
来执行此操作。如果您将自己设置为UIWebView
的UIScrollView
的代表,那么您就是在践踏UIWebView
。做不到。
然后在完成您需要做的事情后将所有委托调用转发到 webview 本身。 IE。将自己保持为委托,然后在委托方法中向 webview 发送相同的消息和参数。【参考方案2】:
为什么不能将标题作为单独的视图放在UIWebView
上方?为什么它必须是子视图?
【讨论】:
它没有。我不知道你从哪里得到的。以上是关于如何获取 UIScrollView 中滚动的 contentOffset?的主要内容,如果未能解决你的问题,请参考以下文章
滚动后如何获取 UIScrollView 的 CGRect?
如何从 UIScrollView 获取 UIButton 位置