尝试了一切。只是试图为一个视图控制器隐藏它。
的.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推送到导航堆栈。
答案 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;
}
一切都按预期工作。可以再次显示状态栏。