隐藏然后重新显示 UINavigationBar 会导致问题

Posted

技术标签:

【中文标题】隐藏然后重新显示 UINavigationBar 会导致问题【英文标题】:Hiding and then re-displaying UINavigationBar causes problems 【发布时间】:2012-08-21 02:37:22 【问题描述】:

我在 viewDidLoad 中隐藏了状态栏和导航栏

- (void)viewDidLoad 
    [super viewDidLoad];
    
    [self.navigationController setNavigationBarHidden:YES animated:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];

一切正常。但是,当我关闭视图控制器时,在 viewWillDisappear: 我做:

- (void)viewWillDisappear:(BOOL)animated 
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];

这会导致我的所有视图定位错误:

我做错了什么? 谢谢

【问题讨论】:

【参考方案1】:

我没有尝试过,所以我只是猜测。 您的导航栏设置了一个框架,就好像没有Status bar。某事以错误的顺序完成。 因此,在您的代码中,我看到当导航栏被要求在没有状态栏的情况下可见时。

[self.navigationController setNavigationBarHidden:NO animated:YES];    
[[UIApplication sharedApplication] setStatusBarHidden:NO];

您是否尝试过反转这两条线? (我只是猜测)

我的另一个测试是设置导航栏在 viewDidAppear 中可见。 那时 applicationFrame 应该已经更新为状态栏再次可见的事实。


我已经对其进行了测试,并且反转调用使其工作。但是你不会得到导航栏和状态栏的动画。如果您需要,我建议您将这些电话拨打至viewWillAppearviewDidAppear

【讨论】:

【参考方案2】:

我认为,当显示导航栏时,应用程序状态栏仍然隐藏,因此导航栏 offsetY 为 0。您应该更改两种调用方法的顺序。

- (void)viewWillDisappear:(BOOL)animated 
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    [self.navigationController setNavigationBarHidden:NO animated:YES];

【讨论】:

以上是关于隐藏然后重新显示 UINavigationBar 会导致问题的主要内容,如果未能解决你的问题,请参考以下文章

隐藏 UINavigationBar 但仍显示状态栏

Uiwebview 用 Swift 隐藏/显示 UInavigationbar

UINavigationBar 在滚动/滑动隐藏后将不再显示

使用滑动隐藏的 UINavigationBar 会留下一个拦截点击以显示它的区域?

显示 UINavigationBar 不起作用

UINavigationBar 在中断从左边缘手势向右滑动后显示返回按钮,如何隐藏它以及为啥显示它?