我有点生气。我有一个在主窗口中可见状态栏的应用程序。由于我想动态设置 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 在什么地方以及可以显示多大,这很有用。
这两个调用之间没有直接关系,只是applicationFrame
在UIScreen bounds
坐标系中返回。 (但是状态栏不是您的应用程序的一部分,它解释了不同的结果)
关于uiview - 如何获得实际的[UIScreen mainScreen]帧大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5150794/