以编程方式添加GADBannerView

我创建了一个类作为AdMobViewController,我用来添加这个类的横幅。 横幅创建但视图中的其他对象不向上滚动。 我如何以编程方式向上滚动视图中的所有对象。

我的AdMobViewController类和方法:

+ (void)createBanner:(UIViewController *)sender { GADRequest *request = [GADRequest request]; request.testing = YES; request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil]; GADBannerView *bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; bannerView.adUnitID = @"ca-app-pub-123456"; bannerView.rootViewController = (id)self; bannerView.delegate = (id)self; bannerView.frame = CGRectMake(0, 518, 320, 50); [bannerView loadRequest:request]; [sender.view addSubview:bannerView]; } 

我用它来创建横幅:

 [AdMobViewController createBanner:self]; 

嗯,我认为你有很多事情需要考虑:

  1. [sender.view addSubview:bannerView]不会移动其他视图,而是将横幅视图直接放在视图层次结构的顶部。

  2. 广告是异步加载的,因此您应该实现GADBannerView的委托方法,以显示和隐藏广告视图。

  3. 如果您真的想要移动其他视图,则应使用某种容器视图来包含除横幅之外的所有其他内容。 如果您收到广告,则可以轻松移动容器视图(或缩小容器视图),并在主视图中的某个位置显示横幅视图。

干杯

工作样本副本在这里:

使用方法:[AdMobViewController createBanner:self];

 #import "AdMobViewController.h" #import "GADBannerView.h" @interface AdMobViewController () @end @implementation AdMobViewController static GADBannerView *bannerView; static UIView *senderView; static UIView *containerView; static UIView *bannerContainerView; static float bannerHeight; + (void)createBanner:(UIViewController *)sender { if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) { bannerHeight = 50; } else { bannerHeight = 90; } GADRequest *request = [GADRequest request]; request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil]; bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; bannerView.adUnitID = @"ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx"; bannerView.rootViewController = (id)self; bannerView.delegate = (id)self; senderView = sender.view; bannerView.frame = CGRectMake(0, 0, senderView.frame.size.width, bannerHeight); [bannerView loadRequest:request]; containerView = [[UIView alloc] initWithFrame:senderView.frame]; bannerContainerView = [[UIView alloc] initWithFrame:CGRectMake(0, senderView.frame.size.height, senderView.frame.size.width, bannerHeight)]; for (id object in sender.view.subviews) { [object removeFromSuperview]; [containerView addSubview:object]; } [senderView addSubview:containerView]; [senderView addSubview:bannerContainerView]; } + (void)adViewDidReceiveAd:(GADBannerView *)view { [UIView animateWithDuration:0.5 animations:^{ containerView.frame = CGRectMake(0, 0, senderView.frame.size.width, senderView.frame.size.height - bannerHeight); bannerContainerView.frame = CGRectMake(0, senderView.frame.size.height - bannerHeight, senderView.frame.size.width, bannerHeight); [bannerContainerView addSubview:bannerView]; }]; } @end 

adViewDidReceiveAd:回调adViewDidReceiveAd: ,检查广告的大小并相应地移动您的视图

这对我有用:

 GADBannerView *gv=[[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; [self.view addSubview:gv]; gv.adUnitID = @"ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx"; gv.rootViewController = self; gv.delegate=(id)self; GADRequest *request = [GADRequest request]; // Enable test ads on simulators. request.testDevices = @[ GAD_SIMULATOR_ID ]; [gv loadRequest:request]; 

这是旁白,因为我的问题看起来很相似,但事实并非如此。

应用ID广告单元ID不同

而且,愚蠢的是,他们从ca-app-pub-和很多数字开始。 我正在使用App ID,我可以保证 100%不起作用。

是的,我觉得很傻,但谷歌的人应该让他们不一样。

但是,如果您使用广告单元ID,令人惊讶的是,一切正常。 🙂