ステータスバーは、uiwebviewが少し下にスクロールされている場合にのみタップを検出します

StackOverflow https://stackoverflow.com/questions/5881170

質問

私は持っています UIWebView のルートビューとして UINavigationController. 。 Webページが終了したら、ナビゲーションバーを隠し、それを見せる方法を探しています。今、私はユーザーがステータスバーをタップしたときにそれをしようとしています(このアプローチ 私が望むものよりも複雑に見えます)。

これを達成するために、まず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を手放さずに、別の指でステータスバーをタップすると機能します! (それは変だ :)

すっごく、それに関する助けはありますか?なぜこうなった?

役に立ちましたか?

解決

iOS 5.0でこれをもう一度試しましたが、期待どおりに機能しているようです。

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

その後:

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

他のヒント

同じ問題がありました。私はそれを解決しました:

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

また、iOS 5のアクセスScrollViewプロパティを取得できます。

webView.scrollView.scrollsToTop = NO ;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top