隐藏状态栏iOS 7时查看框架更改

时间:2014-03-24 18:42:24

标签: ios iphone objective-c uinavigationcontroller uinavigationbar

我试图暂时解决这个问题,

我有一个嵌入在导航控制器中的视图控制器,我想切换状态栏隐藏/显示。

问题是当我将状态栏设置为隐藏时,包括导航栏的所有视图都会跳起来。

如何避免这种行为?
我只是想隐藏状态栏而没有任何其他效果,并且导航栏保持从0到64像素高度延伸。

我创建了一个展示问题的simple project

关于可能解决方案的几点说明:
- 我不能使用自动布局
- 导航栏不能半透明
- "查看基于控制器的状态栏外观"必须设置为NO

2 个答案:

答案 0 :(得分:0)

老实说,我建议你修改你的欲望。您正在描述的行为深深地构建在UINavigationController中,因此,基本上,您无需编写自己的UINavigationController子类就可以执行您所描述的内容 - 但更为诚实的是,它远远不够从清楚到我必须覆盖以干扰此行为,因此可能需要编写替代接口。例如,您可以拥有一个包含导航栏和界面的呈现视图控制器,现在您可以完全控制所有内容的高度和位置...听起来像这是一条不是道路的道路。值得一去。

答案 1 :(得分:0)

首先将所有视图和按钮弹簧和支柱更改为

enter image description here

然后将代码更改为

- (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;

    }];

}

你必须设置动画,否则它会导致问题并在隐藏状态栏时显示黑色区域。