ステータスバーは、uiwebviewが少し下にスクロールされている場合にのみタップを検出します
-
28-10-2019 - |
質問
私は持っています 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 ;
所属していません StackOverflow