为什么UIScreen.main.bounds是反向的而不是静态的?

时间:2019-12-27 14:13:00

标签: swift size screen-orientation uiscreen

我发现UIScreen.main.bounds确实很难掌握。它们不一致,并且它们的值似乎不反映设备。它们不是静态的,而是在设备旋转时发生变化,这确实令人困惑,并且通常这些值与您期望的相反。

例如:

在纵向模式下

print("Portrait", " width: ", UIScreen.main.bounds.size.width, " height: ", UIScreen.main.bounds.size.height)

给予

Portrait width: 1024.0 height: 768.0

如果我错了,请纠正我,但是宽度不应该小于iPad pro模拟器上的高度吗?

风景模式也令人困惑。

print("landscape", " width: ", UIScreen.main.bounds.size.width, " height: ", UIScreen.main.bounds.size.height)

给予

landscape width: 768.0 height: 1024.0

这意味着1. UIScreen.main.bounds不是静态的,而是随屏幕方向而变化的;而2.宽度仍然小于高度。

我不明白。有没有办法获得静态的屏幕尺寸表示,并且有意义呢?

EDIT 另一个奇怪的现象是,如果我在UIScreen.main.bounds.height中进行打印,1024会给出viewDidLoad。但是,如果我改变方向然后又回到原来的状态,然后重新启动模拟器,则相同的打印结果将显示为768。太奇怪了。

1 个答案:

答案 0 :(得分:2)

您咨询过docs on UIScreen.bounds吗?

  

在当前坐标空间中指定此矩形,该矩形考虑了对设备有效的任何接口旋转。因此,当设备在纵向和横向之间旋转时,此属性的值可能会更改。

然后在另请参见部分下方,有一个指向nativeBounds的链接。 Its doc声明:

  

此矩形基于设备的纵向放置。该值不会随着设备旋转而改变。

您有想要的静态范围。