UITableViewController 下面的 ADBannerView

ADBannerView below UITableViewController

我想在 UItableViewController 中的 tableView 下方集成 iAd 横幅。目标是调整 tableview 的大小并添加到 UIViewController 的底部,在本例中为 UITableViewController。我开始考虑 adBannerView 是一个 UIView,所以我在下面为 UIView 编写了代码,它起作用了,但是当我试图通过用 ADBannerView 替换它来实现同样的事情时,它并没有发生。 ADBanner 出现在正确的位置,但 tableView 调整大小丢失。

有人可以尝试理解原因并帮助我找到更好的解决方案。不使用footerView可行吗?

这里是代码。目前是 Utils class 中的静态方法。接下来我会在另一个上下文中使用它,但是你应该很容易自己测试它

class ViewControllerUtils {
    class func showBanner<C:UIViewController where C:ADBannerViewDelegate> ( viewController:C)  {

        println("*** showBanner isLandscape:\(UIDevice.currentDevice().orientation.isLandscape)")

        // you don't care about it for the moment.
        var bannerHeight:CGFloat = 50.0
        if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad{
            bannerHeight = 66.0
        } else if UIDevice.currentDevice().orientation.isLandscape {
            bannerHeight = 32.0
        }
        println("bannerHeight: \(bannerHeight)")

        // created a local variable in order to update the original frame
        var viewFrame  = viewController.view.frame

        UIView.animateWithDuration(1.0, animations: { () -> Void in
                        println("viewFrame \(viewFrame)")

            viewFrame.size.height -= bannerHeight
            viewController.view.frame = viewFrame
            println("viewFrame \(viewFrame)")

            }) { (ended:Bool) -> Void in

                var x = CGPoint(x: viewFrame.origin.x, y: viewFrame.origin.y + viewFrame.size.height)
                var bannerFrame = CGRect(origin:  x, size: CGSize(width: viewFrame.size.width, height: bannerHeight))

                var container = UIView(frame: bannerFrame)
                container.backgroundColor = UIColor.redColor()

                //without this line it works like expected.
                //with it tableview resizing is not applied anymore
                container.addSubview(ADBannerView(frame: CGRect(origin:  CGPointZero, size: CGSize(width: viewFrame.size.width, height: bannerHeight))))

                viewController.view.superview?.addSubview(container)
        }

    }

}

如果您只需要 TableViewController 底部的横幅,您可以只使用预构建的行为,将 canDisplayBannerAds 设置为 true,如下所示:

import UIKit
import iAd

class MainViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.canDisplayBannerAds = true
    }

}