ios - UITableViewController 下面的 ADBannerView

标签 ios uitableview swift adbannerview

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

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

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

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
    }

}

关于ios - UITableViewController 下面的 ADBannerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29443149/

相关文章:

ios - Swift 中的 appearanceWhenContainedIn

ios - 使用 cocoapods 更改导入的库

ios - 无法完成提交 dSYM 当结构到 firebase 迁移以进行 crashlytics

ios - 自定义 TableView Controller 的通用子类的调度问题

ios - 类型 'UIPageViewController.OptionsKey'(又名 'NSString')没有成员 'interPageSpacing'

ios - 如何在 SpriteKit 中获得类似于 peek 或 pop 的 3d touch 应用程序图标触觉反馈

ios - 如何检测自定义 tableview 单元格何时离开屏幕?

ios - TableView 自动维度 Tableview Inside Tableview

ios - 选定的 UITableViewCell 中的复选标记也显示在未选定的单元格上

ios - EXC_BAD_ACCESS 使用 IBInspectable