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

Swift集成Admob插屏广告后无法隐藏状态栏的问题求助

解决AdMob插屏广告无法隐藏状态栏的问题

根据控制台提示和你的代码,问题核心是AdMob广告无法获取状态栏控制权,导致状态栏遮挡关闭按钮。以下是两种可行的修复方案:

前提配置

首先确保Info.plist中已正确设置:

  • 添加View controller-based status bar appearance字段,设置值为YES(iOS 7及以上版本的状态栏控制依赖此项)

方案一:让广告视图控制器接管状态栏控制

完全遵循官方提示的思路,通过重写childViewControllerForStatusBarHidden将状态栏控制权交给AdMob的广告视图控制器:

  1. 在你的ViewController中添加属性记录当前广告控制器:
var currentAdViewController: UIViewController?
  1. 重写状态栏权限相关属性:
override var childViewControllerForStatusBarHidden: UIViewController? {
    return currentAdViewController
}
  1. 完善GADFullScreenContentDelegate回调,更新广告控制器引用:
extension YourViewController: GADFullScreenContentDelegate {
    func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        currentAdViewController = ad.presentingViewController
        setNeedsStatusBarAppearanceUpdate()
    }
    
    func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        currentAdViewController = nil
        setNeedsStatusBarAppearanceUpdate()
    }
    
    // 处理广告展示失败的情况,避免状态残留
    func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
        currentAdViewController = nil
        setNeedsStatusBarAppearanceUpdate()
    }
}

方案二:手动控制状态栏显示/隐藏

如果你更倾向于自主控制状态栏状态,可以通过以下方式实现:

  1. 在你的ViewController中添加状态控制属性:
var shouldHideStatusBar = false
  1. 重写状态栏显示逻辑:
override var prefersStatusBarHidden: Bool {
    return shouldHideStatusBar
}

// 可选:设置状态栏切换的动画效果
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
    return .fade
}
  1. 在广告回调中更新状态栏状态:
extension YourViewController: GADFullScreenContentDelegate {
    func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        shouldHideStatusBar = true
        setNeedsStatusBarAppearanceUpdate()
    }
    
    func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
        shouldHideStatusBar = false
        setNeedsStatusBarAppearanceUpdate()
    }
    
    func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
        shouldHideStatusBar = false
        setNeedsStatusBarAppearanceUpdate()
    }
}

注意:两种方案都依赖你已正确设置interstitial?.fullScreenContentDelegate = self(你的代码中已完成此步骤),确保代理方法能被正常调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:34:54