我正在为 iOS 6 进行开发,并且我正在开发 UIWebView 顶部的一种工具栏,当您在 UIWebView 上向上滚动时,该工具栏会后退。
我的想法是,我可以设置 UIWebView 内的 UIScrollView 的委托,以向我的 UIViewController 发送消息,这将为顶部工具栏上的约束设置动画,使其收缩和移动等等。
但是,该scrollViewDidScroll:
方法似乎没有被调用,这让我感到困惑。
现在,关于 SO 的其他问题还有许多与此类似的问题,其中大部分似乎是人们忘记在 scrollView 上设置委托属性...
- 为什么 UIWebView 实例不调用 scrollViewDidScroll?- 代表。
- scrollViewDidScroll 从未调用过- 委托。
- UIWebView 没有调用 UIScrollViewDelegate 方法- 委托?不得不告诉。
- 如何在 UIScrollView 中实现 scrollViewDidScroll - 委托。
- scrollViewDidScroll 未执行- 并且...委托。
不用说,我正在设置代表。一些代码片段:
SDDefinitionViewController.h:
@interface SDDefinitionViewController : UIViewController <UIWebViewDelegate, UIScrollViewDelegate>
...
SDDefinitionViewController.m:
...
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self loadDefinitions];
// Grab a reference to the ScrollView so that we can set the delegate and then use those method calls to animate the top bar.
self.scrollView = self.webView.scrollView;
self.scrollView.delegate = self;
self.lastScrollViewVerticalOffset = 0;
}
...
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// (Code) <= Never gets called
}
...
而且,最重要的是,我做了一些调试器控制台操作:
(lldb) po self
$0 = 0x095c0600 <SDDefinitionViewController: 0x95c0600>
(lldb) po self.scrollView
$1 = 0x0954e8d0 <_UIWebViewScrollView: 0x954e8d0; frame = (0 0; 1024 596); clipsToBounds = YES; autoresize = H; gestureRecognizers = <NSArray: 0x954ec50>; layer = <CALayer: 0x954eab0>; contentOffset: {0, 0}>
(lldb) po self.scrollView.delegate
$2 = 0x095c0600 <SDDefinitionViewController: 0x95c0600>
所以,委托肯定设置正确,没有任何东西被随机释放。
最后,我以编程方式调用setContentOffset
了self.scrollView
委托方法调用了委托方法。但这并没有真正的帮助,因为我想检测用户何时使用手势滚动。
那么,这有什么独家新闻呢?为什么 scrollView 不会调用它的委托方法?
编辑:
因此,使用Reveal查看我的应用程序,我发现我的 UIWebView 有一个 _UIWebViewScrollView 作为子视图,并且在其下方有一个 UIWebBrowserView。UIWebBrowserView 的大小与 UIWebView 完全相同...
难道是 UIWebViewScrollView 没有一个正常的内容视图,它会偏移等等,webkit 正在做滚动还是什么?