Swift - 为什么 UIScreen.main.bounds 在不同的设备上表现不同?

Swift - Why is UIScreen.main.bounds behaving differently on different devices?

我正在尝试使用 SpriteKit 为 IOS 创建游戏。我的问题是不同的设备输出不同的东西。这是我尝试的代码:

var testPath = CGRect(
   x: 0,
   y: 0,
   width: UIScreen.main.bounds.width * 2,
   height: UIScreen.main.bounds.height * 2
)
var testFill = SKShapeNode(path: CGPath(rect: testPath, transform: nil))

testFill.fillColor = UIColor.black
addChild(testFill)

对于 iPhone 7 这非常有效。对于 iPhone 5,我在顶部和右侧得到额外的 space,Ipad 的结果相同。然而,对于 iPhone 7+,我会走出屏幕。

我的第一个问题是,为什么我需要拍摄main.bounds.height * 2垂直覆盖屏幕。 * 1 还不够吗?其次,更重要的是,为什么我在不同的设备上得到如此不同的结果?

1- 根据游戏逻辑 play space 应该有比屏幕更大的尺寸,所以精灵会从不同的位置出现,如果你将它设置为仅 *1(将填满整个屏幕,包括状态栏) , 添加的精灵将显示在屏幕上,而不是从左到右/从下到上弹跳

2- 每个设备都有自己不同的屏幕尺寸,所以它的尺寸 * 2 也会不同

往这个方向走会遇到很多问题!

您不应使用屏幕尺寸,而应使用视图控制器的视图边界。 这样做可以避免大小问题,如果您的应用程序用于多任务或其他...

override func viewDidLoad() {
    super.viewDidLoad()
    let skView = SKView(frame: self.view.bounds) 
    view.addSubview(skView);
    let scene = MyScene(size: view.bounds.size) // <- construct your scene with the screen size
    skView.presentScene(scene)
  }

然后您可以填充您的场景并使用大小值来布置您的节点。

也许您应该检查 info.plst 以查看有关 启动屏幕 的行: