AdMob 横幅在第一次加载时出现在主页指示器下方,并且不时出现

AdMob banner appears under home indicator in the first load and from time to time

当 ViewController 第一次加载到我的应用程序中时,AdMob 横幅不会出现在它们的专用超级视图中,而是会出现在主页指示器下方,如屏幕截图所示:

我注意到这不仅在第一次加载时发生,而且有时也会发生。

当我在场景 (ViewControllers) 中前后移动时,有时每个横幅都会按应有的方式出现在其专用的超级视图中,有时却不会。

横幅的专用超级视图的最高限制为 0 到安全区。所以它们应该出现在导航栏的正下方。视图按以下顺序从上到下设计:

  1. 导航栏
  2. 安全区开始
  3. 包含横幅的简单 UIView
  4. Table查看
  5. 安全区结束
  6. 主页指示器

相关代码:

override func viewWillAppear(_ animated: Bool) {
    setBanner()
}

func setBanner() {
    banner.delegate = self
    banner.rootViewController = self
    banner.load(GADRequest())
    GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers =
    [ "kGADSimulatorID" ]        
    bannerContainerView.addSubview(banner)
}

我把 setBanner() 放在 func viewDidLoad() 而不是 viewWillAppear(),但没有任何改变。

我在 iOS 模拟器和物理设备上测试并注意到了这种行为。

我在iPhone8上测试时没有出现这个问题,因为它在安全区下没有可见的space。

我猜横幅在它的超级视图可用之前加载,但我不确定。

更新: 包含横幅的视图的约束:

这是您添加横幅广告的视图的限制问题。请检查一下,或者你能展示一下吗 你给了哪些限制?

我意识到这个问题不是由包含横幅的 UIView 的约束引起的,而是由代码中设置的横幅的约束引起的(view.addConstraint())。我已经禁用了这样的约束,问题就简单地解决了。