1

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

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

4

2 に答える 2

1

iOS 5.0 でこれをもう一度試してみたところ、期待どおりに動作するようです。

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

その後:

-(void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
    [self.navigationController setNavigationBarHidden:NO animated:NO];
}
于 2012-04-07T20:13:42.333 に答える
0

私は同じ問題を抱えていました。私はそれを解決しました:

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

また、次の方法で iOS 5 の scrollView プロパティにアクセスできます。

webView.scrollView.scrollsToTop = NO ;
于 2012-01-06T09:23:53.040 に答える