显示键盘时,Admob广告不会显示在UITableView的页脚中 [英] Admob ads not appear in footer of UITableView when keyboard is shown
问题描述
我用它在UITableView的页脚上显示Admob广告:
I use this to show Admob ads on the footer of UITableView:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
GADBannerView *sampleView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
sampleView.hidden=true;
}
sampleView.adUnitID = @"myID";
sampleView.rootViewController = self;
[sampleView loadRequest:[GADRequest request]];
return sampleView;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 50.0;
}
我没有真正的iPhone设备,所以我只在模拟器上测试它。如果软件键盘被隐藏并且我使用MacBook键盘输入了单词,则上面的代码可以正常工作。但是,当我在模拟器中打开软件键盘时,广告无法在页脚加载。相反,它会在搜索栏下方加载。我该怎么解决这个问题?我不知道这个错误是否也发生在真实设备中。
I do not have real iPhone device, so I only test it on simulators. The above code works if the software keyboard is hidden and I typed the word using my MacBook keyboard. However, when I open the software keyboard in simulator, the ads failed to load at footer. Instead it loads directed below the searching bar. How should I solve this? I don't know if this bug also occurred in the real device.
推荐答案
我需要更高的代表才能发表评论,但问题可能与如何你创建了GADBannerView。
I need a higher rep to comment but the issue might be related to how you create the GADBannerView.
你知道只要页脚视图需要委托 -tableView:viewForFooterInSection:
被渲染。如果您将此视图从屏幕滚动到何处,则会再次触发委托。
As you know the delegate -tableView:viewForFooterInSection:
is called whenever the footer view needs to be rendered. If you where to scroll this view out of screen and back the delegate will trigger again.
在 -tableView中创建GADBannerView:viewForFooterInSection:
委托方法会在每次来回滚动时生成新的广告视图,并会发送新的广告请求。
Creating the GADBannerView in the -tableView:viewForFooterInSection:
delegate method will result in a new ad view being created every time you scroll back and forth and a new ad request will be sent.
我的建议是将GADBannerView创建移动到ViewController的 -viewDidLoad:
方法,并且每次都返回相同的实例。
My suggestion is to move the GADBannerView creation to the -viewDidLoad:
method of the ViewController and return the same instance every time.
@interface MyViewController ()
@property (nonatomic, strong) GADBannerView *footerAdView;
@property (nonatomic, assign, getter=isFooterAdRequested) BOOL footerAdRequested;
@end
@implementation MyViewController
...
-(void)viewDidLoad:(BOOL)animated {
self.footerAdView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
_footerAdView.adUnitID = @"myID";
_footerAdView.rootViewController = self;
}
...
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
if(![self isFooterAdFetched]) {
[_footerAdView loadRequest:[GADRequest request]];
self.footerAdRequested = YES; // Set this to NO again when ad is dismissed/closed/ended so that a new ad can be requested only when the current one is done.
}
return _footerAdView;
}
...
@end
即使我下面模糊的猜测对您没有帮助,也许这个示例可以帮助您保留相同的广告视图,并且每次用户来回滚动时都不会更改广告,从而让用户更好一点。
Even if my vague guess below does not help you, maybe the example helps you retain the same ad view and be a bit nicer to the user by not changing the ad every time the user scrolls back and forth.
我的模糊猜测:
我从未使用过Google广告,因此我无法告诉您他们是否尝试处理广告没有正确附加到视图层次结构。我怀疑是分离的广告(由键盘覆盖以便加载新的广告)不知何故被错放。
I have never worked with Google Ads so I cannot tell you if they try to handle ads without being properly attached to the view hierarchy. My suspicion was that the detached ad (covered by the keyboard so that a new one is loaded) somehow gets misplaced.
这篇关于显示键盘时,Admob广告不会显示在UITableView的页脚中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!