仅当UIWebView向下滚动一下时,状态栏才会检测到水龙头

时间:2011-05-04 09:16:36

标签: ios uiwebview uiscrollview uiscrollviewdelegate uistatusbar

我有一个UIWebView作为UINavigationController的根视图。当网页加载完毕后,我隐藏了导航栏,我正在寻找一种方法来显示它。现在,当用户点击状态栏时,我正试图这样做(this approach看起来比我想要的更复杂。)

为了实现这一点,首先我得到了webView的scrollView:

for (id subview in mainWebView.subviews) {
    if ([[subview class] isSubclassOfClass: [UIScrollView class]]) {
        ((UIScrollView *)subview).delegate = self;
    }
}

然后我使用委托方法:

-(BOOL) scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
    [self.navigationController setNavigationBarHidden:NO animated:YES];
    return NO;
}

我希望这会奏效,但这是发生的事情:

  • 页面加载,导航栏隐藏(这很好)
  • 我尝试点击状态栏,但没有任何反应(这很糟糕)
  • 我向下滚动,以便webview与状态栏“相距”
  • 不让webview去,我用另一根手指点击状态栏就可以了! (这很奇怪:)。

Soooo,对此有何帮助?为什么会这样?

2 个答案:

答案 0 :(得分:1)

我刚刚在iOS 5.0中尝试了这个,它似乎按预期工作:

[self.webView.scrollView setDelegate:self];
[self.webView.scrollView setScrollsToTop:YES];

然后:

-(void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
    [self.navigationController setNavigationBarHidden:NO animated:NO];
}

答案 1 :(得分:0)

我有同样的问题。我解决了它:

[[[webView subviews] objectAtIndex:0] setScrollsToTop:NO];

您还可以通过以下方式访问iOS 5中的scrollView属性:

webView.scrollView.scrollsToTop = NO ;