我有点生气。我有一个在主窗口中可见状态栏的应用程序。由于我想动态设置 View 及其帧大小(例如,在通话期间状态栏可能占用40像素)。

我可以执行以下两项之一:

[[UIScreen mainScreen] bounds];
[[UIScreen mainScreen] applicationFrame];

真正令人烦恼的是这两个输出两组不同的值,每组都一样无用。
bounds将输出:{{0, 0}, {320, 480}}applicationFrame将输出{{0, 20}, {320, 460}}
如您所见,bounds给出了正确的y原点(从状态栏正下方的0开始),但是给出了480的高度,这是不正确的。因为状态栏是可见的,所以它应该是460。然后,我们有了applicationFrame,它从状态栏下方开始20个像素(因此有一个上限),然后给出正确的高度。但这在将像素向下推20个像素时不是很有用。

有什么帮助吗?

最佳答案

其实那是非常有用的。
当您向UIScreen询问它的Bounds时,您会看到屏幕的边界,即整个设备屏幕。 (状态栏是屏幕的一部分)
但是,如果您要求一个UIScreen来告诉您,要求applicationFrame的应用程序的根 View 在什么地方以及可以显示多大,这很有用。
这两个调用之间没有直接关系,只是applicationFrameUIScreen bounds坐标系中返回。 (但是状态栏不是您的应用程序的一部分,它解释了不同的结果)

关于uiview - 如何获得实际的[UIScreen mainScreen]帧大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5150794/

10-10 22:43