隐藏状态栏和导航栏位置

时间:2014-04-12 15:22:17

标签: ios iphone objective-c ios7 statusbar

我有一个问题,我无法处理它。我有两个视图控制器,我使用[[UIApplication sharedApplication] setStatusBarHidden:isHidden withAnimation:UIStatusBarAnimationSlide];来显示/隐藏状态栏。所有的工作都很完美,但我需要一件事:一切都嵌入在导航控制器中,隐藏后状态栏导航栏向上移动20像素。如何删除此效果?无论有没有状态栏,我都希望每次都在同一个地方使用导航栏。

编辑1:我已经完成了这个

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.navigationController.navigationBar.layer.transform = CATransform3DIdentity;
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    self.navigationController.navigationBar.layer.transform = CATransform3DMakeTranslation(0, 20, 0);
}

它有效,但动画很糟糕,我需要更好的东西。

3 个答案:

答案 0 :(得分:1)

没有干净的方法来阻止UINavigationController调整其导航栏的高度。我在this SO answer中详细描述了这种行为。

目前唯一的解决方法是UINavigationController只在视图的边界与窗口的边界匹配时执行那些高度调整,即,如果导航控制器的视图填满了屏幕。如果视图的边界关闭,即使是像素,它也会默认为标准的44点高导航栏。

Karah上面的回答是不正确的。 UIViewControllerBasedStatusBarAppearance用于确定状态栏的颜色和可见性。它与UINavigationController的导航栏高度逻辑无关。

答案 1 :(得分:0)

没有明确的方法可以做到这一点,但您可以通过在ViewDidLoad中使用以下代码来设置此内容:

    CGRect statusFrame = CGRectMake(0.0, -20.0, 1024, 20);
    UIView* statusBar = [[UIView alloc] initWithFrame:statusFrame];
    statusBar.backgroundColor = [UIColor blackColor];
    [self.view addSubview:statusBar];
    [statusBar release];

答案 2 :(得分:-1)

隐藏状态栏后,导航栏会自动向上移动以弥补空间。

如果您将UIViewControllerBasedStatusBarAppearance设置为YES,则应该停止该行为。