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



我已经将AdMob标准横幅集成到一个静态表视图单元格中(表视图:1节,5行)。

我想根据是否加载横幅自动隐藏或显示相关的表视图单元格(包含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将始终显示在同一个表视图单元格(行索引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,则有效地"隐藏"。

我一直试图根据自己的需要修改代码,但被卡住了。

问题:我走对了吗?我应该这样处理这个问题吗?如何根据需要修改代码?

感谢您抽出时间;)

凯瑟琳·詹金斯,

是的,你所采用的方法绝对不错。

在您的情况下,您可能只想检查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()
}

最新更新