iOS9 self.canDisplayBannerAds = true 不显示任何广告 [关闭]

作者:编程家 分类: ios 时间:2025-07-02

标题:使用self.canDisplayBannerAds = true后却不显示广告的解决方法

在iOS9中,开发者可以通过设置self.canDisplayBannerAds = true来在应用程序中显示广告。然而,有时候即使开发者设置了这个属性,却无法正确显示广告。本文将介绍一种解决这个问题的方法,并提供相应的案例代码。

问题描述:

当开发者在iOS9中将self.canDisplayBannerAds属性设置为true时,期望应用程序能够显示广告。然而,有时候却发现广告并没有显示出来,这给开发者带来了困扰。

解决方法:

经过调查,发现这个问题可能是由于应用程序的视图层级导致的。在iOS9中,广告视图被添加到应用程序的窗口层级中,而不是视图控制器层级。因此,如果视图控制器的视图层级发生了变化,可能会导致广告无法正确显示。

为了解决这个问题,我们需要确保视图层级正确并且广告视图被添加到了窗口层级中。以下是解决方案的具体步骤:

1. 确保视图层级正确:

确保你的视图控制器的视图层级是正确的,即广告视图被添加到了视图控制器的视图层级中。你可以通过以下代码来确认:

swift

for subview in self.view.subviews {

NSLog(@"%@", NSStringFromClass([subview class]));

}

如果你没有看到一个类似"ADBannerView"的输出,那么说明广告视图没有被正确添加到视图层级中。你需要检查你的视图层级代码,并确保广告视图被正确添加。

2. 添加广告视图到窗口层级:

在iOS9中,广告视图应该被添加到应用程序的窗口层级中,而不是视图控制器的视图层级。你可以通过以下代码将广告视图添加到窗口层级中:

swift

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

appDelegate.window?.rootViewController?.view.addSubview(adBannerView)

确保你将adBannerView替换为你自己的广告视图对象。

案例代码:

以下是一个简单的示例代码,演示了如何正确设置self.canDisplayBannerAds属性,并确保广告正确显示:

swift

import UIKit

import iAd

class ViewController: UIViewController, ADBannerViewDelegate {

var adBannerView: ADBannerView!

override func viewDidLoad() {

super.viewDidLoad()

self.canDisplayBannerAds = true

self.adBannerView = ADBannerView(adType: .Banner)

self.adBannerView.delegate = self

// 添加广告视图到窗口层级

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

appDelegate.window?.rootViewController?.view.addSubview(adBannerView)

}

// 广告视图加载完成

func bannerViewDidLoadAd(banner: ADBannerView!) {

print("广告已加载")

}

// 广告视图加载失败

func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {

print("广告加载失败:\(error)")

}

// 其他代码

// ...

}

在这个示例代码中,我们首先将self.canDisplayBannerAds属性设置为true,然后创建了一个ADBannerView对象,并将其添加到了窗口层级中。通过实现ADBannerViewDelegate协议中的方法,我们可以监控广告视图的加载情况。

在iOS9中,开发者可以使用self.canDisplayBannerAds = true来在应用程序中显示广告。然而,有时候广告却无法正确显示,这可能是由于应用程序的视图层级问题导致的。通过确保视图层级正确并将广告视图添加到窗口层级中,我们可以解决这个问题。通过本文提供的案例代码,开发者可以更好地了解如何正确设置self.canDisplayBannerAds属性,并确保广告能够正确显示。