【发布时间】:2011-07-06 06:24:17
【问题描述】:
我有点生气。我有一个应用程序,其状态栏在主窗口中可见。因为我想动态设置我的视图及其帧大小(例如,在通话期间状态栏可能占用 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 像素时,这并不是很有用。
有什么帮助吗?
【问题讨论】:
-
在处理 iPhone 5 时特别有用。
-
这是完全正确和好的。在这种情况下,边界是物理玻璃屏幕,而 applicationFrame 就是没有状态栏的那个。为了清楚起见,它们都在 SAME 坐标,即“玻璃”坐标中。所以边界从零开始(显然!),而应用程序框架从状态栏结束的地方开始——在 19 之后的 1,即 20!
-
CGPoint p = [[UIScreen mainScreen] bounds].origin; CGSize s = [[UIScreen mainScreen] applicationFrame].size; CGRectMake(p.x, p.y, s.width, s.height);如果你真的想要一个的原点和另一个的大小。
标签: uiview frame uiapplication