【问题标题】:UIScreen bounds versus applicationFrameUIScreen 边界与 applicationFrame
【发布时间】:2023-03-23 18:15:01
【问题描述】:

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

CGRect frame = [[UIScreen mainScreen] bounds]; 

而不是

CGRect frame = [[UIScreen mainScreen] applicationFrame]; 

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

【问题讨论】:

    标签: ios cocoa-touch uiscreen


    【解决方案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 中已弃用
    猜你喜欢
    • 1970-01-01
    • 2013-11-17
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多