隐藏状态栏和导航栏位置
Posted
技术标签:
【中文标题】隐藏状态栏和导航栏位置【英文标题】: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/… 当您过渡到新的视图控制器时,您是否希望看到状态栏向上滑动,而导航栏保持在原位(而不是在新控制器中永远看不到状态栏)? 【参考方案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
,它应该会停止这种行为。
【讨论】:
但是人想隐藏状态栏,保持导航栏位置。仅仅禁用不受单个视图控制器控制的选项没有帮助。以上是关于隐藏状态栏和导航栏位置的主要内容,如果未能解决你的问题,请参考以下文章