Swift开发中如何正确修改Google AdMob原生广告的背景颜色
AdMob 原生模板广告自定义背景色不生效问题
现存问题描述
- 接入Google AdMob原生广告时,因原生模板自定义配置门槛较低选择了该形式,但始终没有找到可生效的广告本体背景色修改方案,查阅各类资料、尝试多轮调整操作均未解决问题。
- 当前应用已切换至深色模式,最终调整目标为广告背景色与应用视图背景色完全统一。
- 实际运行效果参考:模拟器广告运行效果截图
当前使用的广告样式配置代码
func adLoader(_ adLoader: GADAdLoader, didReceive nativeAd: GADUnifiedNativeAd) { templateView?.nativeAd = nativeAd let styles : [GADTNativeTemplateStyleKey: NSObject] = [ .mainBackgroundColor: UIColor.red, .primaryFontColor: UIColor(named: "Primary Text")!, .secondaryFontColor: UIColor(named: "Secondary Text")!, .tertiaryFontColor: UIColor(named: "Secondary Text")!, .primaryFont: UIFont.rounded(ofSize: 17, weight: .semibold), .secondaryFont: UIFont.rounded(ofSize: 15, weight: .medium), .tertiaryFont: UIFont.rounded(ofSize: 15, weight: .medium), .callToActionBackgroundColor: UIColor(.accentColor), .cornerRadius: NSNumber(floatLiteral: 10.0) ] templateView?.styles = styles templateView?.layer.borderColor = UIColor.clear.cgColor }
配置失效原因与修正操作
- 代码中设置的
.mainBackgroundColor是官方支持的全局模板有效配置,未生效的核心原因是GADNativeTemplateView默认开启isOpaque属性,内部广告容器视图会自带一层默认不透明底色,直接遮挡根视图的自定义背景色,表现为无论将mainBackgroundColor设为红色还是其他色值,广告本体始终显示默认底色。 - 修正1:设置完模板样式后,补充关闭模板视图的不透明属性:
templateView?.isOpaque = false - 修正2:替换硬编码的
.mainBackgroundColor配置,传入和应用背景完全一致的动态适配色值,自动匹配深浅色模式的显示效果,示例配置:.mainBackgroundColor: UIColor { $0.userInterfaceStyle == .dark ? UIColor(named: "App Dark Background")! : UIColor(named: "App Light Background")! } as NSObject - 修正3:完成以上配置后若仍存在残留默认底色,不要仅清空边框颜色,需同步将模板根视图的
layer.backgroundColor设为透明,清除AdMob模板自带的默认遮罩层级:templateView?.layer.backgroundColor = UIColor.clear.cgColor - 排查项:确认模板视图未被嵌套在带有固定不透明背景色的容器视图中,避免容器层级颜色覆盖广告的自定义配置。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

