【问题标题】:Hiding status bar and navigation bar position隐藏状态栏和导航栏位置
【发布时间】:2014-05-26 18:30:26
【问题描述】:

我有一个无法处理的问题。我有两个视图控制器,我使用[[UIApplication sharedApplication] setStatusBarHidden:isHidden withAnimation:UIStatusBarAnimationSlide]; 来显示/隐藏状态栏。一切正常,但我需要一件事:一切都嵌入导航控制器中,隐藏状态栏后导航栏向上移动 20 像素。我怎样才能消除这种影响?无论有没有状态栏,我都希望导航栏每次都在同一个地方。

Edit1:我已经这样做了

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

它可以工作,但动画很糟糕,我需要更好的东西。

【问题讨论】:

  • 如果我没记错的话,我认为这是一个已知的错误。信息:blog.motioninmotion.tv/…
  • 当您过渡到新的视图控制器时,您是否希望看到状态栏向上滑动,而导航栏保持在原位(而不是在新控制器中永远看不到状态栏)?

标签: ios iphone objective-c ios7 statusbar


【解决方案1】:

没有干净的方法可以防止 UINavigationController 调整其导航栏的高度。我在this SO answer 中详细描述了该行为。

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

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

【讨论】:

    【解决方案2】:

    没有明确的方法可以做到这一点,但你可以通过在 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];
    

    【讨论】:

      【解决方案3】:

      当你的状态栏被隐藏时,导航栏会自动向上移动以弥补空间。

      如果您将UIViewControllerBasedStatusBarAppearance 设置为YES,它应该会停止这种行为。

      【讨论】:

      • 但是人想隐藏状态栏,保持导航栏位置。仅仅禁用不受单个视图控制器控制的选项没有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多