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 边界景观
iOS ViewController 使用与 Xcode Interface Builder 中的设备相同的边界