Admob横幅不坚持uitableview swift的底部

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Admob横幅不坚持uitableview swift的底部相关的知识,希望对你有一定的参考价值。

我已经在我的应用程序中添加了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

答案

如您所知,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)
    }

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

另一答案

我花了很多年时间尝试人们的建议并继续谷歌搜索。这个问题困扰了我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()
另一答案

你可以这样做,如下图。在底部视图中添加bannerview。你在tableView的footerview中添加了横幅。 https://i.stack.imgur.com/CQcbV.png

以上是关于Admob横幅不坚持uitableview swift的底部的主要内容,如果未能解决你的问题,请参考以下文章

iOS:google admob 横幅不适合 320x50 GADBannerView

iOS 和 Android:在不更新整个应用程序的情况下摆脱 Admob 横幅广告的最快方法?

unity 横幅广告 admob v5.3.0 不显示

AdMob - 同一活动中的横幅和插页式广告 - 好不好?

SwiftUI 中的 Google AdMob 横幅事件集成

在屏幕/视图底部设置 admob 横幅?