You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:30:15