在Swift中以编程方式更改iAd位置

时间:2015-08-19 03:35:07

标签: ios swift constraints iad cgrect

我有一个中等大小的iAd帧(300x250),我希望在我的视图中居中。我首先说我把它卡在视图控制器中,运行模拟器,它显示没问题。然后我添加了自动约束以水平和垂直居中。在故事板预览上它起作用,但是当我在实际的模拟器中运行时,广告无处可寻。我输出了一个成功的声明,所以它确实加载了所有内容,但它没有出现。删除约束纠正了它。

所以我尝试以编程方式进行。我创建了必要的委托和一切,我看到的如何做的代码与其他代码非常相似,所以我不知道为什么这不起作用。无论我在CGRect中使用什么价值,广告在各处看起来都是一样的。

代码:

import UIKit
import iAd

class replayAdViewController: UIViewController, ADBannerViewDelegate {

@IBOutlet var bannerView: ADBannerView!



override func viewDidLoad() {
    super.viewDidLoad()

    bannerView!.delegate = self
}

func bannerViewDidLoadAd(banner: ADBannerView!)
{
    println("success, banner loaded")

    var width = self.view.frame.width
    var height = self.view.frame.height

    banner.frame = CGRectMake(width, height, 300, 250)

    self.view.addSubview(banner) //Add banner to view (Ad loaded)
}

func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError
    error: NSError!)
{
        println("failed to load ad, removed")
        println(error)
        //banner.removeFromSuperview() //Remove the banner (No ad)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

我已经尝试将CGRect语句移出函数并进入viewDidLoad并使用bannerView.frame等。我猜我是以某种方式将横幅与CGRect的属性或错误的东西相关联,但没有错误所以我不知道。另外我不明白为什么自动约束只会使一个垂直和水平的中心弄乱它,但要么解决的问题都会帮助我。

谢谢。

2 个答案:

答案 0 :(得分:2)

假设您的网点设置正确,您应该将广告定位在didMoveToView中,如下所示:bannerView.center = self.view.center此外,在didFailToReceiveAdWithError中,如果您隐藏横幅,效果会更好:{{1 }}。您不必拥有此行bannerView.hidden = true,因为您将标题添加到故事板中的视图。也可以使用约束在故事板中设置横幅的大小。

答案 1 :(得分:1)

感谢您的回复。但是,我确实找到了解决方案。抛弃所有约束,在添加广告代表后,我只是使用代码来创建和移动广告:

var adView = ADBannerView(adType:ADAdType.MediumRectangle)

override func viewDidLoad() {
    super.viewDidLoad()



    adView.frame = CGRectZero
    adView.delegate = self
    adView.frame = CGRectMake(0, 0, self.adView.frame.size.height, self.adView.frame.size.width)

    adView.center = CGPoint(x: self.view.frame.size.width / 2, y: self.view.frame.size.height / 2)

    self.view.addSubview(adView) }

开始时不确定哪里出了问题。我尝试使用插座创建一个按钮并在viewDidLoad中移动它,它也开始无法工作,但我通过在viewDidLayoutSubviews中执行定位代码来解决这个问题...所以如果我正在创建一个插座并使用代码来移动它,我必须使用该特定方法而不是viewDidLoad。也许这就是错误,但无论哪种方式,这都是一个解决方案。