需要将状态栏设置为纯色,或将子视图添加到状态栏

Need to either set status bar to solid color, or add subview to status bar

我正在使用 UINavigationController 并在整个应用程序中显示导航栏,但我不想向用户显示状态栏。我的问题是,如果我隐藏状态栏,那么导航栏的大小就不够大,无法呈现完整的导航栏。

我想执行以下操作之一:

  1. 将状态栏设为纯色。这不会显示任何状态栏内容,它实际上只是颜色。

  2. 向状态栏添加一个子视图,这样我就可以覆盖它的所有 "status" 内容。这个子视图只是一个纯色的 UIView。

这样我就可以在顶部显示全尺寸 "nav bar",而不必实际显示状态栏内容。

编辑:

我一直在尝试以下 UIWindow 解决方法,但没有成功。在我的视图控制器的一个 viewWillAppear: 方法中调用了以下代码:

UIWindow *statusWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
statusWindow.windowLevel = UIWindowLevelStatusBar + 1;
statusWindow.hidden = NO;
statusWindow.backgroundColor = [UIColor redColor];
[statusWindow makeKeyAndVisible];

我无法让它工作。我应该隐藏状态栏还是显示它?我已经尝试用上面的代码隐藏和显示它,我的红色 UIWindow 从未在屏幕上显示。

您唯一能做的就是改变它的颜色或隐藏它。您不能向其添加子视图或隐藏其内容。

我终于明白了。此代码确实可以完美运行:

self.statusWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
self.statusWindow.windowLevel = UIWindowLevelStatusBar + 1;
self.statusWindow.hidden = NO;
self.statusWindow.backgroundColor = [UIColor redColor];
[self.statusWindow makeKeyAndVisible];

关键是,statusWindow不能只是局部变量。它必须是实际的 属性,否则将从内存中释放。

同样值得一提的是,我什至不必调用 makeKeyAndVisible 就可以显示它。