0

4 つのビューを持つ UiTabbar コントローラーがあります。また、(タブバーに)追加したボタンもあります。これは、モーダル ビュー コントローラーを示します。私のモーダルView ControllerのviewDidAppearメソッドには、次のコードがあります

[self setWantsFullScreenLayout:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:YES];

なんらかの理由で、最初の読み込み時にビューが 20 ピクセル下にシフトされます。ビューコントローラーを閉じてから再度表示すると、ビューは目的の位置にあります。ビューが常に正しい場所にあるように、このコードをどこに配置する必要がありますか。

4

1 に答える 1

0

最初に statusBar が既に非表示になっているかどうかを を介してチェックし、非[[UIApplication sharedApplication] isStatusBarHidden]表示でない (== 表示されている) 場合は非表示にします! そうでなければ、そうでなければ!

  • ステータスが表示されているときに 20px を修正するには - ナビゲーションが適切に押されていない場合は、 of に 20 ポイントを追加するだけorigin.yですself.navgigationController.navigationBar.frame

  • ステータスバーを非表示にしたい場合も同じことを行い、その 20 ポイントを削除してそのままorigin.yself.navgigationController.navigationBar.frameしておきます0

私もあなたと同じ問題に遭遇しました。これが私のサンプルコードです。好きなように構成できます。

@implementation SomeViewController {
    BOOL isStatusBarEnabled;
}

// ...

- (void)toggleStatusBar
{
    UINavigationBar *navBar = self.navigationController.navigationBar;

    if ([[UIApplication sharedApplication] isStatusBarHidden]) {

        // Change to regular mode
        // Show status bar
        [[UIApplication sharedApplication] setStatusBarHidden:NO
                                                withAnimation:UIStatusBarAnimationSlide];
        [UIView animateWithDuration:0.3
                         animations:^{
                             navBar.frame = CGRectMake(navBar.frame.origin.x, 20, navBar.frame.size.width, navBar.frame.size.height);
                         } completion:nil];

    } else if (![[UIApplication sharedApplication] isStatusBarHidden]) {
        // Change to fullscreen mode
        // Hide status bar
        [[UIApplication sharedApplication] setStatusBarHidden:YES
                                                withAnimation:UIStatusBarAnimationSlide];
        [UIView animateWithDuration:0.4
                         animations:^{
                             navBar.frame = CGRectMake(navBar.frame.origin.x, 0, navBar.frame.size.width, navBar.frame.size.height);
                         } completion:nil];
    }

}

// ...

...そして、私の場合、ユーザーがステータスバーの表示/非表示の切り替えを選択できるようにする設定キーがあります。

// ...

- (void)onDefaultsChanged:(NSNotification*)aNotification
{

    NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
    isStatusBarEnabled = [standardDefaults boolForKey:kStatusBar];

    if (isStatusBarEnabled) {

      if ([[UIApplication sharedApplication] isStatusBarHidden]) {

          // Change to regular mode
          // Show status bar
          [self toggleStatusBar];   

    } else {

        // Change to fullscreen mode
        // Hide status bar
        [self toggleStatusBar];

  }

  // ...
}

それでおしまい!

于 2013-05-03T18:36:55.300 に答える