Admob横幅不坚持uitableview swift的底部
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Admob横幅不坚持uitableview swift的底部相关的知识,希望对你有一定的参考价值。
我已经在我的应用程序中添加了admob横幅,这些正常工作正常,除非我在tableview中的行没有完全填满屏幕。横幅然后只是坐在最后一排,我想强迫他们“卡住”到屏幕的底部。非常感谢。
//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中添加了横幅。
以上是关于Admob横幅不坚持uitableview swift的底部的主要内容,如果未能解决你的问题,请参考以下文章
iOS:google admob 横幅不适合 320x50 GADBannerView
iOS 和 Android:在不更新整个应用程序的情况下摆脱 Admob 横幅广告的最快方法?