重叠视图iOS7上的状态栏

Posted

技术标签:

【中文标题】重叠视图iOS7上的状态栏【英文标题】:Overlaps the status bar on view iOS7 【发布时间】:2013-09-24 09:49:18 【问题描述】:

我已经在 ios6 中开发了我的 iPad 应用程序,但现在我想在 ios7 中开发该应用程序,我正在使用 .xib 文件并且我没有使用 AutoLayout 我想在我的应用程序中使用黑色状态栏,我想要使应用程序类似于 ios 6 但状态栏在视图上重叠我使用不同的代码,如下面的链接

链接 1 Position of navigation bar for modal view - iOS7

链接 2 iOS 7 - Status bar overlaps the view

提前致谢

【问题讨论】:

【参考方案1】:

不会发生,两种选择:

    使用相应大小的自定义背景图像。IIRC 44(用于导航栏)+ 20(用于状态栏)

    使用黑色的自定义视图占 20 个像素:D

【讨论】:

如果我们使用 44 + 20 像素,那么我们必须更新我们在 xib 文件中使用的所有 UI 对象。所以我不认为这是正确的做法。 @daij-Djan 感谢重播,但如果我为 ios7 调整 xib 的大小意味着向上或向下 44 像素,那么它对 ios6 也有影响,我也不想这样做那:) @Daij-Djan :我认为根据评论,如果我们用 +20(状态栏高度)调整顶栏图像的大小,然后如果我们必须对背景图像进行 -20 像素,那么它将工作。谢谢:) 如果用户使用 iphone 4 或 iphone 7 是否总是 20,那么 20 会是恒定的吗?【参考方案2】:

在 iOS 7 中,状态栏是透明的,而其他栏——即导航栏、标签栏、工具栏、搜索栏和范围栏——是半透明的。作为一般规则,您要确保内容填满应用中栏后面的区域。

因为状态栏是透明的,所以它后面的视图是透出来的。状态栏的样式是指其内容的外观,包括时间、电池电量、Wi-Fi 信号等项目。使用UIStatusBarStyle 常量来指定状态栏内容是深色(UIStatusBarStyleDefault)还是浅色(UIStatusBarStyleLightContent):

UIStatusBarStyleDefault 显示深色内容。当轻量级内容位于状态栏后面时使用。 UIStatusBarStyleLightContent 显示轻量级内容。当状态栏后面有深色内容时使用。

在某些情况下,导航栏或搜索栏的背景图片可以在状态栏后面向上延伸。如果状态栏下方没有栏,则内容视图应使用屏幕的全高。

在 iOS 7 中,您可以从单个视图控制器控制状态栏的样式,并在应用运行时更改它。如果您希望退出此行为并使用UIApplication statusBarStyle 方法设置状态栏样式,请将UIViewControllerBasedStatusBarAppearance 键添加到应用程序的Info.plist 文件并为其指定值@987654330 @。

关于如何在导航控制器中使用状态栏的更多细节,请参考我的回答here。

【讨论】:

它直接从 Apple 的文档中复制而来,没有信用或链接。这是原文:developer.apple.com/library/ios/documentation/userexperience/…【参考方案3】:

试试下面不要覆盖状态栏:

[navController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navBar.png"] forBarPosition:UIBarPositionTop barMetrics:UIBarMetricsDefault];

【讨论】:

使用高度为 88px 的导航栏图片。【参考方案4】:

使用旧样式状态栏的解决方法是修改主视图的框架并将其向下移动 20 像素。这仅适用于 viewWillAppear 函数,但您需要确保调用一次。这更像是一种破解而不是解决方案:

- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];
[self.view setFrame: CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y+20, self.view.frame.size.width, self.view.frame.size.height-20)];

【讨论】:

反向解决方案是否适用于 ios 6 ?如果我想把它调高? 我没试过。如果您需要在 iOS6 中隐藏状态栏,您可以尝试:[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 我刚试过 self.view.frame.origin.y-20 就是不行 :( 为什么要在iOS6中上移视图? iOS6 中的视图从状态栏下方开始。你想覆盖状态栏吗?如果您不想要状态栏,更简单的方法是在 iOS6 中将其隐藏。 我为 iOS 7 做了我的项目,现在我必须支持 ios6 :(,在我的 iOS7 中,我为状态栏留下了 20 像素的白线。

以上是关于重叠视图iOS7上的状态栏的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有状态栏重叠的情况下在 iOS7 上呈现视图控制器

ios 7子视图UINavigationBar与状态栏重叠..任何简单的解决方案..?

iOS 7 状态栏与 UIImagePickerController 上的相机控件重叠

如何修复 iOS 7 中的状态栏重叠问题

iOS 7 状态栏重叠 UI

iOS 7 状态栏重叠 UI - Cordova 3.0 需要解决方案