如何判断视图的视图控制器是不是在 iOS7 的状态栏下方扩展

Posted

技术标签:

【中文标题】如何判断视图的视图控制器是不是在 iOS7 的状态栏下方扩展【英文标题】:How to tell if a view's viewcontroller extends beneath statusbar in iOS7如何判断视图的视图控制器是否在 iOS7 的状态栏下方扩展 【发布时间】:2014-06-19 17:11:11 【问题描述】:

如何判断一个视图的视图控制器是否延伸到 ios7 的状态栏下方?

我猜第一个问题是获得视图的当前ViewController,那么我如何判断ViewController是否延伸到状态栏下方?

澄清/推理 我需要知道这一点,因为我正在向顶部滑入的视图中添加一个信息面板,并且需要填写状态栏下方的视图。根据ViewController的EdgesForexedLayOut属性,0的0可以是窗口的顶部或者在状态栏下方。我需要知道我在处理什么,以便相应地偏移面板。

示例 A: 在简单的UIViewController中包含的视图中显示面板(0将为状态栏下方的面板)

示例 B: 在带有不透明导航栏的 UINavigationController 中显示面板(yPosition 为 0 会将面板放在状态栏下方。实际的设备 yPosition 为 20)。

【问题讨论】:

我不是学究气,但是视图控制器是不可见的。我假设您的意思是视图控制器的 view 属性。 EdgesforexededLayout和ExtendedLayOutIncludeSopaqueBars是ViewControllers的属性,这就是为什么。 span> 【参考方案1】:

如果您知道正在使用的视图控制器,您可以在窗口中获取矩形。

CGRect rectInWindow = [self.view convertRect:self.view.bounds toView:self.view.window];

如果rectInWindow.orig.y == 0rectInWindow.size.height == self.view.window.bounds.size.height,那么你被扩展了。

注意:这仅在 -viewDidAppear: 之后有效。

【讨论】:

谢谢,这就是我想要的。虽然我不得不将 self.bounds 更改为 self.view.bounds @TravisBeck 是的,self.view.bounds,对此感到抱歉。我编辑了我的答案来修复它。【参考方案2】:

您可以在开发时检查视图控制器是否在条形下方延伸边缘,查看情节提要中的以下内容,选择您的视图控制器并搜索 属性检查器

您还可以通过编程检查视图控制器的变量 edgesForExtendedLayoutextendedLayoutIncludesOpaqueBars

请查看以下来自 Apple Docs 的参考资料以获取更多信息和详细说明Docs.

【讨论】:

以上是关于如何判断视图的视图控制器是不是在 iOS7 的状态栏下方扩展的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7:如何在一个视图控制器中将状态栏文本颜色更改为白色,在第二个视图控制器中更改为黑色?

iOS7 UISplitViewController 状态栏

UINavigationController 包含、iOS7 和状态栏。漏洞?

ios7状态栏在模态视图上变回黑色? [复制]

iOS 7:模态视图控制器状态栏颜色错误,但普通视图控制器正确

iOS7 - 无法在滚动视图中嵌入屏幕