如何判断视图的视图控制器是不是在 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 == 0
和rectInWindow.size.height == self.view.window.bounds.size.height
,那么你被扩展了。
注意:这仅在 -viewDidAppear:
之后有效。
【讨论】:
谢谢,这就是我想要的。虽然我不得不将 self.bounds 更改为 self.view.bounds @TravisBeck 是的,self.view.bounds
,对此感到抱歉。我编辑了我的答案来修复它。【参考方案2】:
您可以在开发时检查视图控制器是否在条形下方延伸边缘,查看情节提要中的以下内容,选择您的视图控制器并搜索 属性检查器:
您还可以通过编程检查视图控制器的变量 edgesForExtendedLayout 和 extendedLayoutIncludesOpaqueBars。
请查看以下来自 Apple Docs 的参考资料以获取更多信息和详细说明Docs.
【讨论】:
以上是关于如何判断视图的视图控制器是不是在 iOS7 的状态栏下方扩展的主要内容,如果未能解决你的问题,请参考以下文章
iOS 7:如何在一个视图控制器中将状态栏文本颜色更改为白色,在第二个视图控制器中更改为黑色?
iOS7 UISplitViewController 状态栏
UINavigationController 包含、iOS7 和状态栏。漏洞?