我有一个UINavigationController可见的导航栏.我有一个特别的UIViewController,我想在推入导航堆栈时隐藏状态栏.弹出这个viewController后,我想再次显示状态栏.
我在这个viewWillAppear方法中隐藏了这个栏UIViewController:
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setWantsFullScreenLayout:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
请注意,setWantsFullScreenLayout:YES为了清楚起见,我在此处设置,但实际上我只是在Interface Builder中设置此属性.
问题: NavigationController的导航栏不会向上移动以占用现在隐藏状态栏的空间.
一个hacky解决方案 我发现唯一能够刷新导航栏位置的方法是隐藏它并再次显示它,如下所示:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:YES animated:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];
Run Code Online (Sandbox Code Playgroud)
但这显然是一个黑客,必须有一个更好的方法.
我试过的其他事情:
我试着[super viewWillAppear]在隐藏状态栏之后调用,即在我的方法结束时.
我在navigationController.view上尝试了setNeedsLayout,如下所示:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[self.navigationController.view setNeedsLayout];
Run Code Online (Sandbox Code Playgroud)但这似乎不起作用.
任何帮助赞赏.谢谢
Ron*_*Ron 10
有两种方法可以做你想要的.
一种是手动移动导航栏:
在viewWillAppear中:
[UIApplication sharedApplication].statusBarHidden = YES;
self.view.frame = [UIScreen mainScreen].applicationFrame;
CGRect frame = self.navigationController.navigationBar.frame;
frame.origin.y = 0;
self.navigationController.navigationBar.frame = frame;
Run Code Online (Sandbox Code Playgroud)
在viewWillDisappear中:
[UIApplication sharedApplication].statusBarHidden = NO;
CGRect frame = self.navigationController.navigationBar.frame;
frame.origin.y = 20.0;
self.navigationController.navigationBar.frame = frame;
Run Code Online (Sandbox Code Playgroud)
如果您也愿意关闭导航栏,情况也会好转,虽然我怀疑这不是您想要的:
[UIApplication sharedApplication].statusBarHidden = YES;
self.navigationController.navigationBarHidden = YES;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10454 次 |
| 最近记录: |