【问题标题】:Controller does not resize the views when ADBannerView added添加 ADBannerView 时控制器不会调整视图大小
【发布时间】:2015-11-11 06:47:45
【问题描述】:

阅读 Apple 关于 iAD 的文档后,我的印象是,如果我将 ADBannerView 添加到控制器的视图树中 - 其他视图将被缩放以适应添加。但显然情况并非如此,正如您在此处看到的那样:

这就是我正在使用的代码:

import UIKit
import SpriteKit
import iAd

class GameViewController: UIViewController, ADBannerViewDelegate {

    var mainView: SKView!
    let adBanner = ADBannerView(adType: .Banner)

    override func viewDidLoad() {
        super.viewDidLoad()

        mainView = self.view as? SKView
        mainView.showsDrawCount = true
        mainView.showsNodeCount = true
        mainView.showsFPS = true

        adBanner.delegate = self
        adBanner.center = CGPoint(x: adBanner.center.x, y: mainView.bounds.size.height - adBanner.frame.size.height / 2)
        adBanner.hidden = true
    }

    func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
        return true
    }

    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
        NSLog("error: \(error)")
    }

    func bannerViewWillLoadAd(banner: ADBannerView!) {
        print("WILL LOAD BANNER")
    }

    func bannerViewDidLoadAd(banner: ADBannerView!) {
        print("Loaded Ad \(banner)")
        adBanner.hidden = false
    }

    override func viewWillAppear(animated: Bool) {
        let helloScene = HelloScene(size: mainView.frame.size)
        mainView.presentScene(helloScene)
        mainView.addSubview(adBanner)
    }

    override func shouldAutorotate() -> Bool {
        return false
    }

    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
            return UIInterfaceOrientationMask.AllButUpsideDown
        } else {
            return UIInterfaceOrientationMask.All
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }
}

我错过了什么吗?如果我将设置控制器的self.canDisplayBannerAds = true,则横幅将正确显示在底部,其余部分按我的预期缩放。

是不是因为我使用的是presentScene,它添加了 SKScene 而不是视图?

更新

我尝试添加约束,但我想我前面有很多阅读内容,因为我还无法弄清楚:) 我用谷歌搜索了一段时间并想出了这个,但这并没有改变任何东西所以可能我做错了(添加到viewDidLoad

mainView.addSubview(adBanner)
let viewsDictionary = ["adBanner": adBanner]
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[adBanner]|", options: NSLayoutFormatOptions.AlignAllBaseline, metrics: nil, views: viewsDictionary))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[adBanner]|", options: NSLayoutFormatOptions.AlignAllBaseline, metrics: nil, views: viewsDictionary))

【问题讨论】:

  • 您需要在横幅视图和 skscene 之间设置约束,并在横幅视图出现/消失时调整约束
  • 嗯好的,我试试看。

标签: ios swift sprite-kit iad adbannerview


【解决方案1】:

你可以用

替换你的完整代码
   self.canDisplayBannerAds = true

这是一个简短的tutorial

【讨论】:

  • 嗯,是的,我知道它会起作用。但我更喜欢完全控制它。
  • 好的。那么第一个评论是正确的。您必须指定约束
猜你喜欢
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 2011-02-13
相关资源
最近更新 更多