UIStatusBar 不会消失。悲伤和沮丧随之而来
UIStatusBar will not go away. Sadness and frustration ensues
什么都试过了。只是试图为一个视图控制器隐藏它。
.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 被推送到导航堆栈上。
这里的关键是它从未在视图控制器中被调用:
- (BOOL)prefersStatusBarHidden {
return YES;
}
回溯,也没有在父导航控制器中调用。这是因为导航控制器属于根视图控制器。根视图控制器确实调用了这个方法,但没有将它传递给导航控制器,因此也没有传递给任何其他子视图控制器。因此,对于遇到相同问题并尝试调试的任何人,请尝试在层次结构的 "root" 处找到视图控制器。
所以在我的例子中,我 post 来自任何视图控制器 (viewWillAppear
) 的通知,我想隐藏状态栏。此通知随后由根控制器使用:
- (void)hideStatusBar:(NSNotification *)notification {
self.hideStatusBar = YES;
[self setNeedsStatusBarAppearanceUpdate];
}
强制在根控制器上调用此方法:
- (BOOL)prefersStatusBarHidden {
return self.hideStatusBar;
}
一切都按预期进行。同样可以再次显示状态栏。
在任何包含视图控制器的自定义中,实现 childViewControllerForStatusBarHidden
,返回应控制状态栏外观的当前子视图控制器(在本例中为导航控制器)。
这将使系统按照视图控制器层次结构向下到当前 "top" 视图控制器,并且将查询该视图控制器的 prefersStatusBarHidden
。
在您的自定义包含视图控制器中,如果当前 "active" 子视图控制器发生变化,请调用 setNeedsStatusBarAppearanceUpdate
让系统知道。
什么都试过了。只是试图为一个视图控制器隐藏它。
.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 被推送到导航堆栈上。
这里的关键是它从未在视图控制器中被调用:
- (BOOL)prefersStatusBarHidden {
return YES;
}
回溯,也没有在父导航控制器中调用。这是因为导航控制器属于根视图控制器。根视图控制器确实调用了这个方法,但没有将它传递给导航控制器,因此也没有传递给任何其他子视图控制器。因此,对于遇到相同问题并尝试调试的任何人,请尝试在层次结构的 "root" 处找到视图控制器。
所以在我的例子中,我 post 来自任何视图控制器 (viewWillAppear
) 的通知,我想隐藏状态栏。此通知随后由根控制器使用:
- (void)hideStatusBar:(NSNotification *)notification {
self.hideStatusBar = YES;
[self setNeedsStatusBarAppearanceUpdate];
}
强制在根控制器上调用此方法:
- (BOOL)prefersStatusBarHidden {
return self.hideStatusBar;
}
一切都按预期进行。同样可以再次显示状态栏。
在任何包含视图控制器的自定义中,实现 childViewControllerForStatusBarHidden
,返回应控制状态栏外观的当前子视图控制器(在本例中为导航控制器)。
这将使系统按照视图控制器层次结构向下到当前 "top" 视图控制器,并且将查询该视图控制器的 prefersStatusBarHidden
。
在您的自定义包含视图控制器中,如果当前 "active" 子视图控制器发生变化,请调用 setNeedsStatusBarAppearanceUpdate
让系统知道。