我有一个中等大小的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的属性或错误的东西相关联,但没有错误所以我不知道。另外我不明白为什么自动约束只会使一个垂直和水平的中心弄乱它,但要么解决的问题都会帮助我。
谢谢。
答案 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。也许这就是错误,但无论哪种方式,这都是一个解决方案。