Ну, я понял, как этого добиться, я делюсь информацией на случай, если это поможет кому-то еще.
Внутри AppDelegate
вы получаете правильные значения безопасной области и сохраняете их в одиночном коде (в моем случае:safeAreaHeight
) для доступа по всему приложению.Вычтите сумму из высоты сцены (sceneHeight
).
let kWindow = UIApplication.shared.windows[0]
safeAreaHeight = kWindow.safeAreaInsets.top + kWindow.safeAreaInsets.bottom
screenHeight = screenRect.size.height - safeAreaHeight
Не забудьте отрегулировать sceneHeight
в GameViewController перед его представлением:
if let view = self.view as! SKView? {
// Load the SKScene from 'MainMenuScene.sks'
if let scene = SKScene(fileNamed: "MainMenuScene") {
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFit
scene.size.height = sceneHeight
scene.size.width = sceneWidth
// Present the scene
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
Внутри загруженной сцены,в этом случае это MainMenuScene
, вы просто находите подпредставление SKScene и корректируете его положение Y, вычитая safeAreaHeight
в его центре
guard let subView = self.view else { return }
subView.center.y -= safeAreaHeight
PS: не настраивайте все виды в разных сценах(т. е. GameScene, GameOverScene и т. д.) После настройки он остается в приложении.