【问题标题】:Changing iAd position programmatically in Swift在 Swift 中以编程方式更改 iAd 位置
【发布时间】:2015-11-12 04:45:23
【问题描述】:

我有一个中等大小的 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,但这部分无关紧要,因为无论我卡在那里,位置都将保持不变。

标签: ios swift constraints iad cgrect


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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。也许这就是错误,但无论哪种方式,这都是一个解决方案。

    【讨论】:

      猜你喜欢
      • 2017-02-05
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多