UIScreen 边界与 applicationFrame

Posted

技术标签:

【中文标题】UIScreen 边界与 applicationFrame【英文标题】:UIScreen bounds versus applicationFrame 【发布时间】:2011-03-08 09:38:37 【问题描述】:

为什么我在来自 Apple 的一些示例代码(例如 PhotoScroller)中看到我应该在 loadView 中执行以下操作:

CGRect frame = [[UIScreen mainScreen] bounds]; 

而不是

CGRect frame = [[UIScreen mainScreen] applicationFrame]; 

获取主屏幕的框架有区别吗?

【问题讨论】:

【参考方案1】:

ApplicationFrame 是屏幕大小减去状态栏(如果可见)的大小,bounds 是屏幕大小,与状态栏无关。

因此 applicationFrame 将返回 CGRectMake(0,0,320,460) 假设您的应用程序将状态栏设置为可见,而 bounds 将在相同条件下返回 CGRectMake(0,0,320,480)。这些数字假设 iPhone/iPod Touch 屏幕尺寸。

UIScreen Class Reference

【讨论】:

我可能弄错了,但是 applicationFrame 不返回 CGRectMake(0, 20, 320, 460) 吗?其中 20 是状态栏的偏移量... 你没看错,尼尔斯 :)。 y 偏移量将报告为 20 并带有状态栏,而不是 0。 嗨@jamone,如果显示个人热点怎么办?它似乎需要 20 点高(与状态栏相同)。 applicationFrame 会在 3.5 英寸 iPhone 上返回 CGRectMake(0, 40, 320, 440) 而在 4 英寸 iPhone 上返回 CGRectMake(0, 40, 320, 528) 吗? @congliu 没错。在 iPhone 5 上,ApplicationFrame 通常为 (x=0, y=20, w=320, h=548) 但当个人热点或通话状态栏出现时,它变为 (x=0, y=40, w =320, h=528)【参考方案2】:

iOS 9 更新

在 iPad 上使用拆分视图功能时,applicationFrame 返回应用程序窗口的大小。 bounds 总是返回设备的大小。

【讨论】:

-applicationFrame ios 9 中已弃用

以上是关于UIScreen 边界与 applicationFrame的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iphone 应用程序中制作 UIScreen 边界景观

iOS7和iOS8返回的不同UIScreen边界[重复]

iOS ViewController 使用与 Xcode Interface Builder 中的设备相同的边界

UIScreen applicationFrame 在横向应用程序启动时返回不正确的矩形 (iPhone/iPad)

有没有办法在 tvOS 中获取屏幕的大小?

UIScreen 是不是有屏幕开启通知?