我试图暂时解决这个问题,
我有一个嵌入在导航控制器中的视图控制器,我想切换状态栏隐藏/显示。
问题是当我将状态栏设置为隐藏时,包括导航栏的所有视图都会跳起来。
如何避免这种行为?
我只是想隐藏状态栏而没有任何其他效果,并且导航栏保持从0到64像素高度延伸。
我创建了一个展示问题的simple project。
关于可能解决方案的几点说明:
- 我不能使用自动布局
- 导航栏不能半透明
- "查看基于控制器的状态栏外观"必须设置为NO
答案 0 :(得分:0)
老实说,我建议你修改你的欲望。您正在描述的行为深深地构建在UINavigationController中,因此,基本上,您无需编写自己的UINavigationController子类就可以执行您所描述的内容 - 但更为诚实的是,它远远不够从清楚到我必须覆盖以干扰此行为,因此可能需要编写替代接口。例如,您可以拥有一个包含导航栏和界面的呈现视图控制器,现在您可以完全控制所有内容的高度和位置...听起来像这是一条不是道路的道路。值得一去。
答案 1 :(得分:0)
首先将所有视图和按钮弹簧和支柱更改为
然后将代码更改为
- (IBAction)toggleStatusBar:(UIButton *)sender {
_hidden = !_hidden;
[[UIApplication sharedApplication] setStatusBarHidden:_hidden withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:0.2 animations:^{
CGRect frame = self.navigationController.navigationBar.frame ;
_hidden?(frame.size.height +=20):(frame.size.height -=0);
self.navigationController.navigationBar.frame = frame;
CGRect frame2 = self.view.frame ;
_hidden?(frame2.origin.y +=20):(frame2.origin.y -=0);
_hidden?(frame2.size.height -=20):(frame.size.height -=0);
self.view.frame = frame2;
}];
}
你必须设置动画,否则它会导致问题并在隐藏状态栏时显示黑色区域。