在 iOS8 中使用 clipsToBounds = YES 时状态栏完全变黑。我该如何改变?

chr*_*s P 2 cocoa-touch statusbar uinavigationbar ios8

我通过 AppDelegate 中的 UINavigationBar 外观代理将 NavigationBar 的半透明属性设置为 NO。

然后,为了摆脱 UINavigationBar 和它下面的视图之间的 1 像素高度分隔符,在我的 ViewController 中,我设置了self.navigationcontroller.navigationbar.clipsToBounds = YES;.

这是去掉分隔符,实现类似这样的效果...

在此处输入图片说明

UINavigationBar 下方还有一个带日期的附加视图。

但是,当我开始使用 clipsToBounds = YES 时,我的状态栏完全变黑了。我不要这个。我希望它是“蓝色”的,就像在这个 CBS Sports 应用程序的照片中一样。

如何更改状态栏的颜色,或者为什么我的导航栏颜色不再延伸到状态栏?[另外,我使用的是嵌入式 NavigationController,而不是我拖到视图中的那个]

Leo*_*ica 5

不要将clipsToBounds属性设置为YES。扩展条的工作方式是将图层绘制到其边界之外直到状态栏下方。

您在这里有两个选择。一种是使用运行时技巧删除分隔符,我已经在这个答案中解释了如何做

由于您的案例不涉及半透明导航栏,因此会简单得多。您要设置的是shadowImage像这样为空:

self.navigationController.navigationBar.shadowImage = [UIImage new];
Run Code Online (Sandbox Code Playgroud)

但是您会注意到这不会立即起作用。文档提到,除非使用其中一种setBackgroundImage:方法设置背景图像,否则这将不起作用。由于您的条形图不是半透明的并且只有一种颜色,您可以使用该颜色创建一个 1x1px 宽的图像,并将其设置为背景图像。