【问题标题】:UIStatusBar will not go away. Sadness and frustration ensuesUIStatusBar 不会消失。悲伤和沮丧随之而来
【发布时间】:2015-12-02 19:50:17
【问题描述】:

什么都试过了。只是想为一个视图控制器隐藏它。

.plist:

Status bar is initially hidden = NO
View controller-based status bar appearance = YES

视图控制器:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

//I shouldn't have to do this, the above method should suffice. Doesn't work anyway
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];

}

没有任何作用。状态栏还在那里,盯着我的脸,通过它的丑陋大笑。我需要做什么???

编辑:prefersStatusBarHidden 甚至没有被调用。这个视图控制器通过 push segue 被推送到导航堆栈上。

【问题讨论】:

  • 不应该将Status bar is initially hidden 设置为YES?编辑:忘了看第二句话。我的错。
  • 您是否尝试过这些建议:stackoverflow.com/questions/23615647/…?
  • 并非如此。我不是模态的。我只是在推进导航堆栈。
  • 您的项目中是否还有其他可能相关的代码?我只是尝试重新创建它。为 .plist 设置相同的值,将 VC A 中的 prefersStatusBarHidden 设置为 VC B 中的 false 和 true。我创建了一个简单的按钮 segue,它工作正常。可能需要更多信息
  • 你的视图控制器层次结构是什么?您是否有任何包含视图控制器可能无法正确转发状态栏状态请求?

标签: ios uiviewcontroller uistatusbar


【解决方案1】:

在任何包含自定义的视图控制器中,实现childViewControllerForStatusBarHidden,返回应控制状态栏外观的当前子视图控制器(在本例中为导航控制器)。

这将使系统沿着视图控制器层次结构向下到当前的“顶部”视图控制器,并且将查询该视图控制器的prefersStatusBarHidden。

在您自定义的包含视图控制器中,如果当前“活动”子视图控制器发生变化,请调用setNeedsStatusBarAppearanceUpdate 让系统知道。

【讨论】:

    【解决方案2】:

    这里的关键是它永远不会在视图控制器中被调用:

    - (BOOL)prefersStatusBarHidden {
        return YES;
    }
    

    向后追溯,它也没有在父导航控制器中调用。这是因为导航控制器归根视图控制器所有。根视图控制器确实调用了这个方法,但没有将它传递给导航控制器,因此也没有传递给任何其他子视图控制器。因此,对于遇到相同问题并尝试调试的任何人,请尝试在层次结构的“根”处追踪视图控制器。

    所以在我的情况下,我从任何视图控制器 (viewWillAppear) 发布一条通知,我想隐藏状态栏。然后根控制器会使用此通知:

    - (void)hideStatusBar:(NSNotification *)notification {
        self.hideStatusBar = YES;
        [self setNeedsStatusBarAppearanceUpdate];
    }
    

    这会强制在根控制器上调用此方法:

    - (BOOL)prefersStatusBarHidden {
        return self.hideStatusBar;
    }
    

    一切都按预期进行。再次显示状态栏也可以这样做。

    【讨论】:

    • 您实际上应该在根视图控制器中实现childViewControllerForStatusBarHidden,指向导航视图控制器(或其他适当的子视图控制器)。这样,系统将直接遵循视图控制器层次结构。如果子视图控制器发生变化,请拨打setNeedsStatusBarAppearanceUpdate让系统知道。
    猜你喜欢
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多