GoogleMobileAds 11.0.0:BannerView不兼容UIViewControllerRepresentable问题求助
GoogleMobileAds 11.0.0 问题解决指南
1. BannerView 不兼容 UIViewControllerRepresentable 协议,存在 updateUIViewController 仍提示需实现
- 核心问题:
GADBannerView是UIView子类,直接实现UIViewControllerRepresentable会导致协议关联类型不匹配;方法签名不符合协议要求也会触发报错。 - 解决方案:
- 不要让
GADBannerView直接实现UIViewControllerRepresentable,而是创建结构体包装承载广告的UIViewController:struct AdBannerView: UIViewControllerRepresentable { typealias UIViewControllerType = BannerHostViewController func makeUIViewController(context: Context) -> BannerHostViewController { BannerHostViewController() } func updateUIViewController(_ vc: BannerHostViewController, context: Context) { // 根据业务需求更新广告视图,比如刷新广告 } } class BannerHostViewController: UIViewController { private var bannerView: GADBannerView! override func viewDidLoad() { super.viewDidLoad() bannerView = GADBannerView(adSize: GADAdSizeBanner) bannerView.adUnitID = "你的广告单元ID" bannerView.rootViewController = self bannerView.load(GADRequest()) view.addSubview(bannerView) bannerView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ bannerView.centerXAnchor.constraint(equalTo: view.centerXAnchor), bannerView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) } } - 检查
updateUIViewController签名:必须严格匹配func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context),确保关联类型UIViewControllerType正确指向宿主ViewController。
- 不要让
2. 无法找到 kGADAdSizeBanner
- 原因:GoogleMobileAds 11.0.0 重构了广告尺寸定义,原Objective-C风格的常量
kGADAdSizeBanner已被替换为Swift枚举值GADAdSizeBanner。 - 解决方案:直接使用
GADAdSizeBanner替代,示例:let bannerView = GADBannerView(adSize: GADAdSizeBanner)
内容的提问来源于stack exchange,提问作者Asif Raza
相关产品推荐
相关产品推荐

