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

SpriteKit游戏中Admob插屏广告在iOS真机无法全屏显示求助

解决SpriteKit游戏中AdMob插屏广告在iPhone 6s真机无法全屏的问题

嘿,这个适配坑我之前帮朋友踩过!模拟器正常但真机显示不全,大概率是视图布局或App缩放模式的问题,给你几个针对性的排查和解决步骤:

1. 确保GameViewController的SKView完全占满屏幕

SpriteKit的游戏视图默认可能因为自动布局或frame设置问题,没有铺满真机屏幕,导致广告present时的容器尺寸不对。在GameViewController的viewDidLoad里调整SKView的设置:

override func viewDidLoad() {
    super.viewDidLoad()
    
    guard let skView = self.view as? SKView else { return }
    // 强制设置SKView的frame为屏幕完整尺寸
    skView.frame = UIScreen.main.bounds
    // 缩放模式选择.aspectFill,确保场景内容铺满屏幕(不影响广告)
    skView.scaleMode = .aspectFill
    
    // 初始化并展示游戏场景
    if let gameScene = GameScene(fileNamed: "GameScene") {
        gameScene.scaleMode = .aspectFill
        skView.presentScene(gameScene)
    }
}

2. 检查App的启动配置,避免运行在缩放模式

iPhone 6s如果没有正确的启动资源,系统会自动把App按旧设备尺寸缩放,导致实际可用屏幕区域变小,广告自然无法全屏。

  • 打开Xcode的项目设置,进入Target -> General -> App Icons and Launch Images
  • 确保Launch Screen File设置为你的启动页storyboard,或者Launch Images Source包含了iPhone 6s对应的尺寸(750x1334像素)

3. 优化广告展示的时机和方式

通过观察者模式调用广告时,可能视图还没完成布局,导致广告容器尺寸异常。调整广告展示的代码:

func showInterstitialAd() {
    guard let interstitial = interstitialAd, interstitial.isReady else { return }
    
    // 强制当前视图完成布局,确保尺寸正确
    self.view.layoutIfNeeded()
    // 用当前GameViewController作为根VC展示广告,不要用其他容器
    interstitial.present(fromRootViewController: self)
}

另外,避免在viewDidLoad里直接调用广告展示,最好在viewDidAppear之后,确保视图已经完全渲染到屏幕上。

4. 更新AdMob SDK到最新版本

旧版本的AdMob SDK可能对老设备的适配存在bug,打开CocoaPods或Swift Package Manager,把Google-Mobile-Ads-SDK更新到最新稳定版。

额外排查点

如果以上步骤都没用,可以检查:

  • 有没有在GameViewController中添加了额外的子视图,挤占了主视图的空间
  • 设备的显示缩放设置(设置->显示与亮度->显示模式)是否为“标准”,如果是“放大”模式,可能会影响广告的全屏展示

内容的提问来源于stack exchange,提问作者Everton Carneiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:18:06