Showing/Hiding 静态 TableView 单元格如果 BannerView Loads/Not 加载

Showing/Hiding Static TableView Cell If BannerView Loads/Not Load

我已将 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.

有效 "hidden"

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

问题:我走的路对吗?这是我应该如何处理这个问题吗?我怎样才能根据需要修改代码?

感谢您的宝贵时间 ;)

凯瑟琳·詹金斯,

是的,您采用的方法绝对没问题。

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

    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()
}