我有一个带有可见导航栏的UINavigationController
。我有一个特殊的UIViewController
,我想在推送到导航堆栈中时隐藏状态栏。一旦这个viewController弹出,我想再次显示状态栏。
我将这个栏隐藏在UIViewController
的viewWillAppear
方法中,如下所示:
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setWantsFullScreenLayout:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
}
请注意,为了清楚起见,我在这里设置了setWantsFullScreenLayout:YES
,但实际上我只是在接口生成器中设置此属性。
问题: NavigationController的导航栏没有向上移动来占据现在隐藏的状态栏空间。
A hacky解决方案我发现唯一能刷新导航栏位置的方法是隐藏它,然后再次显示它,如下所示:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:YES animated:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];
但这显然是一种黑客行为,一定有更好的方法。
其他我尝试过的东西:
[super viewWillAppear]
,即在我的方法的末尾。[UIApplication sharedApplication setStatusBarHidden:YES动画:YES];self.navigationController.view self.navigationController.view
但这似乎并不管用。
感谢您的帮助。谢谢
https://stackoverflow.com/questions/2393868
复制相似问题