我有一个问题,我无法处理它。我有两个视图控制器,我使用[[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);
}
它有效,但动画很糟糕,我需要更好的东西。
答案 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
,则应该停止该行为。