重叠视图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上的状态栏的主要内容,如果未能解决你的问题,请参考以下文章
ios 7子视图UINavigationBar与状态栏重叠..任何简单的解决方案..?