iOS 7状态栏透明

在故事板中,在视图控制器中,我尝试在状态栏下添加一个导航栏,运行它,它是透明的,并显示一个应该模糊的标签,如导航栏。

在这里输入图像说明

但是当将相同的视图控制器embedded到导航视图控制器中时,下面的背景图像可能会模糊,这是我的意图。

在这里输入图像说明

这两种方式有什么不同的结果? 第一种方法需要做什么来使状态栏模糊?

谢谢!

在iOS 7中,默认状态栏是透明的。 导航栏实际上是由导航栏创build的,您看到的模糊也是导航栏。 因此,要在没有导航栏的情况下创build所需的效果,您需要在状态栏下方放置一个可以产生模糊效果的视图。

为了便于参考,请使用以下提供的框架添加您的视图:

CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; 

我知道这是旧的,仅供参考,我通过设置self.navigationController.navigationBar.clipToBounds = NO

我还没有完全testing过,但是去你的plist文件,并检查以下设置:

“基于视图控制器的状态栏外观”:如果将其设置为“是”,则应显示每个视图控制器独有的状态栏,这可能是您需要的。

“状态栏样式”:您可以将其设置为三种不同的样式:不透明黑色,灰色和透明黑色。

让我知道这是否适合你。

UINavigationController会将其UINavigationBar的高度更改为44点或64点,这取决于一个相当奇怪的和没有logging的约束。 如果UINavigationController检测到其视图的顶部与UIWindow的顶部相邻,则绘制其导航栏,高度为64点。 如果它的视图的顶端与UIWindow的顶端不相连(即使只closures一个点),那么它以44的高度以“传统”方式绘制其导航栏。 即使在应用程序的视图控制器层次结构中存在多个子项,UINavigationController也会执行此逻辑。 没有办法阻止这种行为。

它看起来像你正在定位你的视图层次结构的第一个例子(0,20)开始。 此外,这是一个UIToolbar或UINavigationBar? 如果是后者,为什么你自己使用它,而不是在UINavigationController中使用它?

如果您不使用UINavigationController而是使用自定义视图控制器容器,则需要相应地放置视图。

看到这个答案进行彻底的解释。

我有类似的用户界面devise,基于马特·霍尔的答案和一些我GOOGLE了一些文章 ,我想出了这样的事情:

 - (void)viewDidLoad { [super viewDidLoad]; if (NSFoundationVersionNumber>NSFoundationVersionNumber_iOS_6_1) { CGRect statusBarFrame = [self.view convertRect: [UIApplication sharedApplication].statusBarFrame fromView: nil]; UIToolbar *statusBarBackground = [[UIToolbar alloc] initWithFrame: statusBarFrame]; statusBarBackground.barStyle = self.navBar.barStyle; statusBarBackground.translucent = self.navBar.translucent; statusBarBackground.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth; [self.view addSubview: statusBarBackground]; } } 

self.navBar指向故事板中添加的导航栏。 这只是在iOS7上运行的情况下才需要,这就是为什么我添加了这个条件(我的应用程序必须支持iOS5)。

这就像一个魅力。


替代方法(强制状态栏大小)也不错:

 - (void)viewDidLoad { [super viewDidLoad]; if (NSFoundationVersionNumber>NSFoundationVersionNumber_iOS_6_1) { CGRect statusBarFrame = [self.view convertRect: [UIApplication sharedApplication].statusBarFrame fromView: nil]; self.navBar.frame = CGRectUnion(statusBarFrame, self.navBar.frame); } } 

我发现另一个解决scheme,我认为这是最好的,因为它只涉及故事板 ,不需要代码。

  1. 切换故事板视图到6.1模式(查看:iOS 6.1和更早版本) 改变视图模式
  2. select有问题的UINavigationBar
  3. 在“iOS6 / 7三angular洲”中增加20三angular洲高度 正确的导航栏大小
  4. 将视图切换回7.0模式(查看:iOS 7.0和更高版本),并对结果感到满意。

当您将视图控制器与导航视图控制器一起embedded时,您将看到导航栏到您要从同一视图控制器推送到的所有视图控制器。 在第一种情况下,您将添加导航栏对象,但可以从故事板中select视图控制器,转到属性检查器选项卡并从其select的顶部栏作为半透明导航栏。 在这里输入图像说明