Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中以编程方式更改iAd位置_Ios_Swift_Constraints_Iad_Cgrect - Fatal编程技术网

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

Ios 在Swift中以编程方式更改iAd位置,ios,swift,constraints,iad,cgrect,Ios,Swift,Constraints,Iad,Cgrect,我有一个中等大小的iAd框架(300x250),我想在我的视图中居中。首先让我说,我把它放在视图控制器中,运行模拟器,结果显示没有问题。然后,我将自动约束添加到水平和垂直居中。在故事板预览版上,它起作用了,但当我在实际的模拟器上运行它时,却找不到广告。我输出了一个成功声明,所以它确实加载了所有内容,但没有出现。移除约束可以纠正它 所以我试着用编程的方式来做。我创建了必要的委托和所有东西,我看到的代码与其他代码非常相似,所以我不知道为什么这不起作用。无论我在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等。我猜我是在某种程度上将banner与CGRect的属性或其他错误链接,但没有错误,所以我不知道。我也不明白为什么自动约束会把它搞得只有一个垂直和水平的中心,但解决这两个问题都会帮我解决


谢谢。

假设您的门店设置正确,您应该在
didMoveToView
中这样定位广告:
bannerView.center=self.view.center
此外,在
didfailetoreceiveawitherror
中,如果您隐藏横幅:
bannerView.hidden=true
,效果会更好。您不必有这一行
self.view.addSubview(banner)
,因为您可以将横幅添加到情节提要中的视图中。横幅的大小也可以使用约束在情节提要中设置。

谢谢您的回复。然而,我确实找到了解决办法。抛开所有约束,在添加Ad委托后,我只是使用代码创建和移动Ad,如下所示:

var adView=ADBannerView(adType:ADAdType.MediumRectangle)


我真的不知道事情从哪里开始就出了问题。我尝试使用插座创建按钮并在viewDidLoad中移动它,这也开始不起作用,但我通过在viewDidLayoutSubviews中执行定位代码解决了这一问题……因此,如果我创建插座并使用代码移动它,我可能必须使用特定的方法,而不是viewDidLoad。也许这是个错误,但无论哪种方式,这都是一个解决方案。

我也意识到要居中,它必须是高度和宽度除以2,但那部分是不相关的,因为无论我卡在那里,位置都会保持不变。
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) }