iOS6和iOS7的UIScreen bounds和applicationFrame区别

Posted

技术标签:

【中文标题】iOS6和iOS7的UIScreen bounds和applicationFrame区别【英文标题】:UIScreen bounds and applicationFrame difference between iOS6 and iOS7 【发布时间】:2013-11-17 12:26:45 【问题描述】:

使用iPhone4s ios7,屏幕方向为横向

-使用以下 SDK 构建应用程序

我使用 iOS6 SDK 和 iOS7 SDK 构建了应用程序,并检查了每个屏幕分辨率。结果如下:

iOS6 SDK:

[[UIScreen mainScreen] bounds]           == (0, 0, 320, 480)
[[UIScreen mainScreen] applicationFrame] == (0, 0, 300, 480)

iOS7 SDK:

[[UIScreen mainScreen] bounds]           == (0, 0, 300, 480)
[[UIScreen mainScreen] applicationFrame] == (0, 0, 320, 480)

为什么我们在 iOS7 中会得到反转值?

【问题讨论】:

【参考方案1】:

是的。在 iOS6 及更低版本中,视图中不包含状态栏。但是在 iOS7 中状态栏是包含在主视图中的。如果你使用导航控制器,那么你可以通过设置导航栏的 Translucent 和 Opaque 属性来获得 iOS6 的行为。

[self.navigationController.navigationBar setOpaque:YES];
[self.navigationController.navigationBar setTranslucent:NO];

类似的标签栏在 iOS7 中默认也是半透明的。您可以通过设置这些属性将它们设置为不透明。

[self.tabBarController.tabBar setOpaque:YES];
[self.tabBarController.tabBar setTranslucent:NO];

【讨论】:

我同意状态栏布局可能会导致值反转。但是我无法理解 iOS7 中的边界宽度显示“300”。我认为应该是“320”,因为这两种情况都不包括状态栏高度。

以上是关于iOS6和iOS7的UIScreen bounds和applicationFrame区别的主要内容,如果未能解决你的问题,请参考以下文章

[UIScreen mainScreen].bounds.size 在 iOS8 中是不是变得依赖于方向?

iOS 7 状态栏和 self.view.frame 和 self.view.bounds

为啥 [UIScreen mainScreen].bounds] 没有返回全屏尺寸?

Xcode / Swift / UIScreen.main.bounds.size.height 返回 0

([[UIScreen mainScreen] scale] == 2.0) & ([[UIScreen mainScreen] bounds].size.height == 568.0) 不

[UIScreen mainScreen].bounds 与 [UIApplcation sharedApplication].keyWindow.bounds?