0

NavigationBar と Status Bar (スライドアップ アニメーション) を非表示にしようとしていますが、問題が発生しています。

ステータスバーが表示されている場合、0 ポイント (x: 0) にあるすべての要素の原点は、ステータスバーの真下を意味します。ただし、ステータスバーが非表示の場合、0 (x: 0) ポイントは新しいスペースに対応するように更新され、0 (x: 0) は画面の絶対上部を意味します。

ステータス バーを非表示にして横向きに回転すると、ビューが自動サイズ変更され、すべてがステータス バーのスペースを使用するようにシフトされ、アニメーションが中断されます。

if (![[UIApplication sharedApplication] isStatusBarHidden]) {
            // Change to fullscreen mode
            // Hide status bar and navigation bar
            [[UIApplication sharedApplication] setStatusBarHidden:YES
                                                    withAnimation:UIStatusBarAnimationSlide];
            [UIView animateWithDuration:animationDuration animations:^{
                navBar.frame = CGRectMake(navBar.frame.origin.x,
                                          -navBar.frame.size.height-20,
                                          navBar.frame.size.width,
                                          navBar.frame.size.height);
            } completion:^(BOOL finished) {
                [navBar setHidden:TRUE];
            }];
        } else {
            // Change to regular mode
            // Show status bar and navigation bar

            [navBar setHidden:FALSE];

            [[UIApplication sharedApplication] setStatusBarHidden:NO
                                                    withAnimation:UIStatusBarAnimationSlide];
            [UIView animateWithDuration:animationDuration animations:^{
                navBar.frame = CGRectMake(navBar.frame.origin.x,
                                              0,
                                              navBar.frame.size.width,
                                              navBar.frame.size.height);
            } completion:^(BOOL finished) {

            }];
        }

助言がありますか?

編集:回転の再レイアウト後の画面は次のようになります:画像

4

1 に答える 1

1

画面の UIView 領域への分割を少し混乱させています。

ナビゲーション コントローラーを使用している場合、次の 3 つのビューがあります。

  • ナビゲーション コントローラーの「ルート」ビュー
  • その中に、NavigationBar (もちろんこれは UIView です)
  • また、ナビゲーション コントローラー内の「コンテンツ エリア」ビュー

したがって、Nav コントローラーは独自のルート ビューを管理しています。上部の NavigationBar でスペースを埋め、残りの領域をコンテンツ用の 1 つの大きな UIView で埋めます。

ビュー コントローラーをナビゲーション スタックにプッシュすると、Nav コントローラーがルートビューをコンテンツとして追加します。したがって、「self.view」全体は、Nav コントローラーの「content」ビューに完全に含まれています。

もちろん、Nav コントローラがナビゲーション バーを非表示にすると、「コンテンツ」ビューが拡大してスペースを埋めます。そして、そのビューはビュー「使用しているよりも多くのスペースがあるためビューも拡大し​​て Nav コントローラーのコンテンツ ビューを完全に埋めます。

したがって、ビューの「0」ポイントは常にビューの一番上になります。それは決して変わらない。変更されているのは、「ビューの上部」が画面の上端に相対的な場所です。

ナビゲーション バーが削除されたときにコンテンツを画面上の同じ場所に残したい場合は、ナビゲーション バーがコンテンツを押していたときよりも「ゼロ」ポイントが高くなったという事実を考慮する必要があります。下を見る。

于 2013-03-07T11:10:53.070 に答える