0

我有一个有 4 个视图的 UiTabbar 控制器。我还添加了一个按钮(添加到标签栏)。这提供了一个模态视图控制器。在我的模态视图控制器的 viewDidAppear 方法中,我有以下代码

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

出于某种原因,第一次加载时,视图向下移动了 20 像素。如果我关闭视图控制器,然后再次显示它,则视图处于所需位置。我应该在哪里放置此代码,以便视图始终位于正确的位置。

4

1 回答 1

0

首先我们通过 来检查 statusBar 是否已经隐藏[[UIApplication sharedApplication] isStatusBarHidden],如果它没有隐藏(== 被显示),我们隐藏它!否则,另当别论!

  • 要在显示状态时修复 20px - 但导航未正确下推,只需将 20 点添加origin.yself.navgigationController.navigationBar.frame.

  • 当我们想要隐藏状态栏时也这样做,只需删除那个 20 点就可以origin.y了。self.navgigationController.navigationBar.frame0

我也遇到了同样的问题,下面是我的示例代码,你可以随意配置:

@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 回答