我不知道我是否遗漏了一些东西,但这是我在使用iOS 9的iPhone 6p上运行时所看到的:
[[UIScreen mainScreen] applicationFrame]
为我提供了一个矩形{0, 20}, {414, 716}
和
[[UIScreen mainScreen] bounds]
给了我{0, 0}, {414, 736}
我以编程方式创建了我的UIView,因此我将其设为{414,736},但由于UIView位于状态栏之后,因此只保留前20px。现在,如果我启用热点并连接设备,状态栏会变得更高,所以现在我得到:
[[UIScreen mainScreen] applicationFrame] = {0, 40}, {414, 696}
和
[[UIScreen mainScreen] bounds] gives me {0, 0}, {414, 736}
然而,我的UIView现在似乎部分位于状态栏下,即如果我使用与之前相同的方法并尝试创建一个736高的视图并将第一个40px留空,我会在底部被截断,约20像素。这对我来说没有任何意义,我无法通过一种方式了解状态栏的推动情况"视图向下,我不想检查高度== 40并对解决方案进行硬编码。
我是否遗漏了文档中的内容?
编辑:也许我说得不够好。假设我在self.view中添加了一个原点(0,0)大小(20,40)的绿色矩形。当状态栏未扩展时,我可以看到它位于状态栏后面,从(0,0)开始:
因此,如果我想将它放在任务栏下面,我会使用[[UIScreen mainScreen] applicationFrame] .origin.y或状态栏宽度属性,这将添加20px,或状态栏的大小。当状态栏更改为扩展时,[[UIScreen mainScreen] applicationFrame] .origin.y和状态栏宽度变为40px,因此您认为您仍然会将其添加到位置。然而,你的顶视图现在莫名其妙地(对我而言)距离屏幕顶部20px的星星,所以在(0,0)处添加一个40px的盒子,就像之前在状态栏后面只画了一半(图像是相同的)高度和以前一样,即绿色框向下移动):
因此,如果我将[[UIScreen mainScreen] applicationFrame] .origin.y添加到我的项目定位中,它们现在比我预期的要低20px。我可以检查状态栏的宽度并相应地改变行为,但这听起来很愚蠢。应该有一种方法让我知道我的视图的哪个部分状态栏真正重叠,以及留给我的高度。因此,状态栏似乎与常规和扩展状态栏重叠20px,但在后一种情况下,我的顶视图丢失了另外20px的可用高度,我无法从系统中找到一种方法。