UINavigationBar 的高度错误,因为加载时状态栏被隐藏

Posted

技术标签:

【中文标题】UINavigationBar 的高度错误,因为加载时状态栏被隐藏【英文标题】:UINavigationBar has wrong height because the status bar is hidden while loading 【发布时间】:2014-05-01 08:30:15 【问题描述】:

我在AppDelegate 中设置了一个UITabBarController 作为根视图控制器。

我在窗口上添加了一个加载视图,而应用程序下载了一些数据。当加载屏幕可见时,我隐藏了状态栏。加载完成后,我会淡出加载视图并再次显示状态栏。

我的问题是,当我显示状态栏时,导航栏没有绘制到正确的高度,因为状态栏在绘制时被隐藏了。如果我切换到另一个选项卡,它会得到正确的高度。

我试过[navigationController.view setNeedsLayout],但这似乎得到了ViewController的视图位置正确,但导航栏的内容没有调整大小。我也试过[navigationController.navigationBar setNeedsLayout],但这确实有帮助。

所以我基本上想让导航抽屉在加载视图消失时获得状态栏和内容的正确高度。我该怎么做?

【问题讨论】:

【参考方案1】:

您是否尝试过如下重置导航和状态栏?

-(void)resetNavigationBar

    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

    [self.navigationController setNavigationBarHidden:YES];

    [self.navigationController setNavigationBarHidden:NO];

【讨论】:

这个答案很好,但是你应该把 setStatusBarHidden: 从 YES 改成 NO。【参考方案2】:

我会在加载视图的 viewWillDisappear: 方法中取消隐藏状态栏。

- (void)viewWillDisappear:(BOOL)animated

     [super viewWillDisappear:animated];
     [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

【讨论】:

以上是关于UINavigationBar 的高度错误,因为加载时状态栏被隐藏的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationBar + UITabBar 的可用屏幕高度

如何在 iOS 7 中将 UINavigationBar 高度的高度从 64 点更改为 44 点?

如何在 Swift 中增加自定义 UINavigationBar 类的高度

iOS 11:大标题的 UINavigationBar 高度(模仿 Apple Music 应用)

iPhone - 如何设置 uinavigationbar 高度?

UINavigationBar 框架高度返回 44.0 但实际上是 64.0