Admob横幅不坚持uitableview swift的底部

时间:2017-12-23 12:40:57

标签: swift uitableview admob

我已经在我的应用程序中添加了admob横幅,这些正常工作正常,除非我在tableview中的行没有完全填满屏幕。横幅然后只是坐在最后一排,我想强迫他们“卡住”到屏幕的底部。非常感谢。

enter image description here

enter image description here

//MARK: Properties
// Ad banner and interstitial views
    var adMobBannerView = GADBannerView()
    let ADMOB_BANNER_UNIT_ID = "ca-app-pub-xxxxxxx"

 override func viewDidLoad() {
        super.viewDidLoad()
        // Init AdMob banner
        initAdMobBanner()
        }


override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return adMobBannerView
    }

    override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {

        return adMobBannerView.frame.height
    }

// MARK: -  ADMOB BANNER
    func initAdMobBanner() {

        if UIDevice.current.userInterfaceIdiom == .phone {
            // iPhone
            adMobBannerView.adSize =  GADAdSizeFromCGSize(CGSize(width: 320, height: 50))
            adMobBannerView.frame = CGRect(x: 0, y: view.frame.size.height, width: 320, height: 50)
        } else  {
            // iPad
            adMobBannerView.adSize =  GADAdSizeFromCGSize(CGSize(width: 468, height: 60))
            adMobBannerView.frame = CGRect(x: 0, y: view.frame.size.height, width: 468, height: 60)
        }

        adMobBannerView.adUnitID = ADMOB_BANNER_UNIT_ID
        adMobBannerView.rootViewController = self
        adMobBannerView.delegate = self
        view.addSubview(adMobBannerView)

        let request = GADRequest()
        adMobBannerView.load(request)
    }


    // Hide the banner
    func hideBanner(_ banner: UIView) {
        banner.frame = CGRect(x: view.frame.size.width/2 - banner.frame.size.width/2, y: view.frame.size.height - banner.frame.size.height, width: banner.frame.size.width, height: banner.frame.size.height)
        banner.isHidden = true
    }

    // Show the banner
    func showBanner(_ banner: UIView) {
        banner.frame = CGRect(x: view.frame.size.width/2 - banner.frame.size.width/2, y: view.frame.size.height - banner.frame.size.height, width: banner.frame.size.width, height: banner.frame.size.height)
        banner.isHidden = false
    }

    // AdMob banner available
    func adViewDidReceiveAd(_ view: GADBannerView) {
        // Reposition the banner ad to create a slide up effect
        let translateTransform = CGAffineTransform(translationX: 0, y: adMobBannerView.bounds.size.height)
        adMobBannerView.transform = translateTransform
        showBanner(adMobBannerView)
        UIView.animate(withDuration: 0.5) {
            self.adMobBannerView.transform = CGAffineTransform.identity
        }
    }

    // NO AdMob banner available
    func adView(_ view: GADBannerView, didFailToReceiveAdWithError error: GADRequestError) {
        // Reposition the banner ad to create a slide up effect
        let translateTransform = CGAffineTransform(translationX: 0, y: adMobBannerView.bounds.size.height)
        adMobBannerView.transform = translateTransform
        hideBanner(adMobBannerView)
        UIView.animate(withDuration: 0.5) {
            self.adMobBannerView.transform = CGAffineTransform.identity
        }
    }

我使用过这两个教程:

https://www.appcoda.com/google-admob-ios-swift/

https://code.tutsplus.com/tutorials/how-to-add-admob-banner-ads-to-your-ios-swift-app--cms-27403

3 个答案:

答案 0 :(得分:1)

正如您所知,iPhone和iPad在屏幕的宽度和高度上都有各种尺寸。

在代码中,您提供恒定的高度,宽度和ADMOB帧的位置,并且在iPhone中可以很好地运行5,5s和SE版本,

对于其他上层屏幕模型,您必须动态设置它们,

这是我的解决方案:

我认为你必须更新方法以启动广告小组的框架和位置

if UIDevice.current.userInterfaceIdiom == .phone {
        // iPhone
        adMobBannerView.adSize =  GADAdSizeFromCGSize(CGSize(width: view.frame.size.width, height: 50))
        adMobBannerView.frame = CGRect(x: 0, y: view.frame.size.height - 50.0, width: view.frame.size.width, height: 50)
    } else  {
        // iPad
        adMobBannerView.adSize =  GADAdSizeFromCGSize(CGSize(width: view.frame.size.width, height: 60))
        adMobBannerView.frame = CGRect(x: 0, y: view.frame.size.height - 60.0, width: view.frame.size.width, height: 60)
    }

在此,我首先从视图本身获取设备的高度和宽度。

答案 1 :(得分:1)

我花了很多时间尝试人们的建议并继续使用谷歌搜索。这个问题困扰了我2个星期,我很高兴地说我用一条线解决了这个问题。

当我在导航控制器中嵌入tableview时(如果你不知道如何做到这一点,请参见此处:Apple tute table navigation )我看到有人提到将子视图添加到UITableViewController的“ontop”导航控制器中。

所以我只是改变了这一行:

view.addSubview(adMobBannerView) 

self.navigationController?.view.addSubview(adMobBannerView)

由于横幅广告不再是uitableviewcontroller的一部分,我也删除了以下内容:

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return adMobBannerView
    }

    override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {

        return adMobBannerView.frame.height
    }

我的其余代码仍然用于横幅放置,动画等,它们仍然可以应用并且完美无缺。

我希望这可以帮助那些遇到同样问题的人。

哦,如果你需要删除这个子视图,它也是一个班轮 -

admobBannerView.removeFromSuperview()

答案 2 :(得分:0)

你可以像下图一样。在底部视图中添加bannerview。你在tableView的页脚视图中添加了横幅。 https://i.stack.imgur.com/CQcbV.png