我发现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。太奇怪了。
答案 0 :(得分:2)
您咨询过docs on UIScreen.bounds
吗?
在当前坐标空间中指定此矩形,该矩形考虑了对设备有效的任何接口旋转。因此,当设备在纵向和横向之间旋转时,此属性的值可能会更改。
然后在另请参见部分下方,有一个指向nativeBounds
的链接。 Its doc声明:
此矩形基于设备的纵向放置。该值不会随着设备旋转而改变。
您有想要的静态范围。