UIStatusBar不会消失。随之而来的是悲伤和沮丧

时间:2015-12-02 19:50:18

标签: ios uiviewcontroller uistatusbar

尝试了一切。只是试图为一个视图控制器隐藏它。

的.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推送到导航堆栈。

2 个答案:

答案 0 :(得分:1)

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

这将让系统跟随视图控制器层次结构向下到当前的“顶部”视图控制器,并且它将是查询控制器的prefersStatusBarHidden,它将被查询。

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

答案 1 :(得分:0)

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

- (BOOL)prefersStatusBarHidden {
    return YES;
}

向后追踪,也没有在父导航控制器中调用它。这是因为导航控制器由根视图控制器拥有。根视图控制器确实调用了此方法,但未将其传递给导航控制器,因此不会传递给任何其他子视图控制器。因此,对于遇到相同问题并尝试调试的任何人,请尝试在" root"处跟踪视图控制器。你的等级制度。

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

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

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

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

一切都按预期工作。可以再次显示状态栏。