iAd 横幅在 segue 上变白

Posted

技术标签:

【中文标题】iAd 横幅在 segue 上变白【英文标题】:iAd banner goes white on segue 【发布时间】:2015-10-16 23:07:30 【问题描述】:

我正在使用 Xcode 7、Swift 2.0。这个问题既发生在模拟器中,也发生在我在 App Store 上可用的实际应用程序中。很多时候(并非总是如此),当我在我的应用程序中执行 segue 时,adBanner 在加载新广告之前会变成纯白色。我很困惑,因为有广告可用,即使它是白色的!

这是我的代码:

我初始化了 ADBannerView:

var adBanner = ADBannerView(adType: ADAdType.Banner)

在我看来DidLoad:

self.canDisplayBannerAds = true
self.adBanner.delegate = self
self.adBanner.hidden = true
self.adBanner.alpha = 0
self.adBanner.frame.origin.y = self.view.frame.height-self.adBanner.frame.height
self.view.addSubview(self.adBanner)

我的 viewDidDisappear:

override func viewDidDisappear(animated: Bool) 

        super.viewDidDisappear(true)

        adBanner.removeFromSuperview()

        if( deviceType.isEqualToString("iPhone") )
        

            adBanner.delegate = nil

        

    

在我的课堂上:

    func bannerViewDidLoadAd(banner: ADBannerView!)
    

        self.adBanner.hidden = false
        UIView.animateWithDuration(0.5, animations: self.adBanner.alpha = 1)

    

    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!)
    
        self.adBanner.hidden = true
        UIView.animateWithDuration(0.5, animations: self.adBanner.alpha = 0)

    

    func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool
    

        return willLeave

    

    func bannerViewWillLoadAd(banner: ADBannerView!) 

    

使用 Xcode 运行应用程序时,尽管我已经实现了委托方法,但偶尔会收到此消息:

ADBannerView:未处理的错误(没有委托或委托未实现 didFailToReceiveAdWithError:):错误域=ADErrorDomain Code=5“操作无法完成。横幅视图可见但没有内容”UserInfo=0x9632d30 ADInternalErrorCode =5, NSLocalizedFailureReason=Banner 视图可见但没有内容

编辑:问题是使用canDisplayBannerAds 导致不调用委托方法。更多信息在这里:Hiding iAd ADBannerView in Swift when ad fails to load - no delegate or delegate does not implement didFailToReceiveAdWithError

【问题讨论】:

【参考方案1】:

这里有一些对我有用的代码。这不需要self.candisplaybannerads = true,因为我对此有一些问题。广告会根据屏幕尺寸自动改变尺寸,位于屏幕底部。在我的 spritekit 游戏中,它在过渡时变白没有任何问题。

import iAd

class viewController: UIViewController, ADBannerViewDelegate 

var AdBanner = ADBannerView()

override func viewDidLoad() 
    super.viewDidLoad()

        /* Ad Banner Settings */

        AdBanner = ADBannerView()
        AdBanner.frame = CGRectZero
        AdBanner.delegate = self
        self.AdBanner.frame = CGRectMake(0, self.view.frame.size.height-self.AdBanner.frame.size.height, self.AdBanner.frame.size.width, self.AdBanner.frame.size.height)
        AdBanner.backgroundColor = UIColor.clearColor()
        self.view.addSubview(AdBanner)



/* All iAd Functions */

func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool 
/* whatever you need */
    return true


func bannerViewActionDidFinish(banner: ADBannerView!) 
/* whatever you need */


func bannerViewDidLoadAd(banner: ADBannerView!) 
    AdBanner.hidden = false



func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) 
    NSLog("Error Loading Ad")
/* whatever you need */
    AdBanner.hidden = true

func bannerViewWillLoadAd(banner: ADBannerView!) 
/* whatever you need */

【讨论】:

谢谢!看来问题是canDisplayBannerAds这行代码,很奇怪。我最终做的只是在我的 appDelegate 中实现了一个广告横幅。更多信息可以在这里找到:***.com/questions/28514758/…

以上是关于iAd 横幅在 segue 上变白的主要内容,如果未能解决你的问题,请参考以下文章

iOS 在 iPad 详细拆分视图中更改 iAD 横幅大小

iAd 横幅显示在模拟器上,但不显示在设备上

iAd 默认横幅尺寸不正确

带有 iAd 横幅的 UITableView 上的奇怪溢出

使用故事板在 UItableView 中添加 iAd 横幅

iAd 横幅错误“iAd 实例过多”