Swift 4 SpriteKit游戏适配iPhone X:如何取消自动扩展避免内容截断?
解决SpriteKit游戏在iPhone X上被刘海截断的问题
嘿,这个情况我太熟悉了——把游戏迁到Swift 4后,iPhone X这类带刘海的设备默认会让游戏全屏延伸,结果把关键内容给挡住了。要恢复到未适配时的显示状态(也就是内容不被刘海/底部指示器截断,上下留黑边保持原有比例),给你几个实用的办法:
方法一:禁止视图延伸到安全区域外
打开你的GameViewController.swift,在viewDidLoad方法里加上这行代码:edgesForExtendedLayout = []这行代码会告诉系统,你的视图不要延伸到状态栏、刘海或者底部指示器这些安全区域之外,游戏内容会乖乖待在安全区内,上下自动留黑边,完美回到之前的显示状态。
方法二:直接限定SKView的渲染范围
如果上面的方法没生效,你可以手动把SKView的frame绑定到安全区域的边界。在GameViewController里重写viewDidLayoutSubviews方法:override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() guard let skView = view as? SKView else { return } skView.frame = view.safeAreaLayoutGuide.layoutFrame }这样SKView会严格在安全区域内渲染,完全避开刘海和底部的遮挡区域。
方法三:调整场景的缩放模式(保持原始比例)
要是你希望游戏内容保持原来的宽高比,不被拉伸变形,还可以调整SKScene的scaleMode。比如你原来的场景尺寸是1024x768,在初始化场景时这么写:let scene = GameScene(size: CGSize(width: 1024, height: 768)) scene.scaleMode = .aspectFit skView.presentScene(scene).aspectFit会让整个场景按原始比例完整显示在视图内,多余的区域留黑边,这样不管屏幕是什么形状,游戏内容都不会被截断或变形。
这几个方法都很容易实现,你可以先试试第一个,一般就能解决问题啦。
内容的提问来源于stack exchange,提问作者Jamal H
相关产品推荐
相关产品推荐

