如果BannerView加载/未加载,则显示/隐藏静态TableView单元格

时间:2016-05-10 08:32:33

标签: ios swift uitableview show-hide banner

我已将AdMob标准横幅整合到静态tableview单元格中(tableview:1节,5行)。

我想自动隐藏或显示相关的tableview单元格(包含AdMob横幅视图),具体取决于横幅是否已加载。

我的AdMob横幅广告代码:

import UIKit
import GoogleMobileAds

class WorkoutsFreeListTVC: UITableViewController, GADBannerViewDelegate {

@IBOutlet weak var bannerView: GADBannerView!

override func viewDidLoad() {
    super.viewDidLoad()

    bannerView.hidden = true
    bannerView.adUnitID = "ca-app-pub-9451126739340372/2084650447"
    bannerView.rootViewController = self
    bannerView.delegate = self

    let request = GADRequest()
    request.testDevices = ["dcf33ab873fb56fdf5ff94bd7a5f3fde"]

    bannerView.loadRequest(GADRequest())
}

测试横幅是否加载的功能:

func adViewDidReceiveAd(bannerView: GADBannerView!) {
    bannerView.hidden = false
}

func adView(bannerView: GADBannerView!, didFailToReceiveAdWithError error: GADRequestError!) {
    bannerView.hidden = true
}

我的bannerView将始终在同一个tableview单元格中显示(如果可用于加载)(行索引3)。

我正在考虑这段代码来实现我想要的结果:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.row == 3 && !myImageIsLoaded {
    return 0
}
// Will hide just the fourth row of my table if myImageIsLoaded is false

return 50

}

我从一个类似的问题得到的,其中单元格高度返回为零(0)并且有效地"隐藏"如果!myImageIsLoaded

我一直在努力根据自己的需要修改代码,但是卡住了。

问题:我是否走在正确的轨道上?这是我应该如何处理这个问题的?如何根据我的需要修改代码?

感谢您的时间;)

1 个答案:

答案 0 :(得分:1)

凯瑟琳詹金斯,

是的,你所遵循的方法绝对没问题。

在您的情况下,您可能只想检查bannerView是否隐藏。如果隐藏,则将行高设置为0,否则正确返回单元格的高度。

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath.row == 3 {
        if bannerView.hidden
             return 0
        else 
             return 50 //value of height for banner cell
    }
    else {
        return 50 //return other cell height
    }
}

并且为了反映单元格高度的变化,您可以

func adViewDidReceiveAd(bannerView: GADBannerView!) {
    bannerView.hidden = false
    self.tableView.reloadData()
}

func adView(bannerView: GADBannerView!, didFailToReceiveAdWithError error: GADRequestError!) {
    bannerView.hidden = true
    self.tableView.reloadData()
}