【问题标题】:How to compensate for hidden status bar in modal view over tabbed nav view如何通过选项卡式导航视图补偿模态视图中的隐藏状态栏
【发布时间】:2013-03-23 17:21:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: uitabbarcontroller modalviewcontroller uistatusbar


    【解决方案1】:

    首先我们通过[[UIApplication sharedApplication] isStatusBarHidden]检查statusBar是否已经隐藏,如果没有隐藏(==被显示),我们隐藏它!否则,请不要这样做!

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

    • 当我们想要隐藏状态栏时也这样做,只需删除 self.navgigationController.navigationBar.frame 中指向 origin.y 的 20 个点,然后将其保留为 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];
    
      }
    
      // ...
    }
    

    就是这样!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多