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