UIScreen的bounds和applicationFrame有什么区别?

12

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

CGRect frame = [[UIScreen mainScreen] bounds]; 

相比之下

CGRect frame = [[UIScreen mainScreen] applicationFrame]; 

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

2个回答

17

ApplicationFrame 是屏幕大小减去状态栏的大小(如果可见),bounds 则是屏幕大小而不考虑状态栏。

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

UIScreen 类参考


8
我可能错了,但是applicationFrame不是返回CGRectMake(0, 20, 320, 460)吗?其中20是状态栏的偏移量… - Niels R.
2
你没错,Niels :). y偏移量将在状态栏中报告为20,而不是0。 - Nate
嗨@jamone,如果个人热点被显示出来怎么办?它似乎占用了20个点的高度(与状态栏相同)。applicationFrame是否会在3.5英寸的iPhone上返回CGRectMake(0, 40, 320, 440),在4英寸的iPhone上返回CGRectMake(0, 40, 320, 528)? - George
@congliu 没错。在iPhone 5上,ApplicationFrame通常是(x=0,y=20,w=320,h=548),但当个人热点或通话状态栏出现时,它变为(x=0,y=40,w=320,h=528)。 - Wheelie

2

iOS 9更新

在iPad上使用分屏功能时,applicationFrame返回的是应用窗口的大小。bounds始终返回设备的大小。


3
-applicationFrame在iOS 9中已经被弃用。 - jscs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接