2015-05-11 12 views
7
gezeigt

ich die AdMob-Anzeigen in der Fußzeile UITableView zu zeigen, verwenden:AdMob-Anzeigen nicht in der Fußzeile UITableView angezeigt, wenn Tastatur

- (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; 
} 

Ich habe kein echtes iPhone-Gerät, so dass ich es nur auf Simulatoren testen . Der obige Code funktioniert, wenn die Softwaretastatur ausgeblendet ist und ich das Wort mit meiner MacBook-Tastatur eingegeben habe. Wenn ich jedoch die Softwaretastatur im Simulator öffne, konnten die Anzeigen nicht in der Fußzeile geladen werden. Stattdessen lädt es direkt unterhalb der Suchleiste. Wie soll ich das lösen? Ich weiß nicht, ob dieser Fehler auch im realen Gerät aufgetreten ist.

Admob no in footer

Antwort

2

Ich brauche eine höhere rep zu kommentieren, aber das Problem könnte in Beziehung gesetzt werden, wie Sie die GADBannerView erstellen.

Wie Sie wissen, wird der Delegat -tableView:viewForFooterInSection: aufgerufen, wann immer die Fußzeilenansicht gerendert werden muss. Wenn Sie diese Ansicht außerhalb des Bildschirms und zurück verschieben möchten, wird der Delegat erneut ausgelöst.

Wenn Sie die GADBannerView in der Delegatenmethode -tableView:viewForFooterInSection: erstellen, wird bei jedem Bildlauf eine neue Anzeigenansicht erstellt und eine neue Anzeigenanfrage wird gesendet.

Mein Vorschlag ist, die GADBannerView Erstellung in die -viewDidLoad: Methode des ViewControllers zu verschieben und die gleiche Instanz jedes Mal zurückzugeben.

@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 

Auch wenn meine vage Vermutung unten hilft Ihnen nicht, vielleicht das Beispiel hilft Ihnen, die gleiche Anzeige Ansicht behalten und etwas schöner für den Benutzer sein, indem nicht jedes Mal, scrollt der Benutzer hin und her um die Anzeige zu ändern.

Meine vage Vermutung:

Ich habe nie gearbeitet mit Google-Anzeigen, so kann ich Ihnen nicht sagen, wenn sie versuchen, Anzeigen zu handhaben, ohne auf die Ansichtshierarchie richtig angebracht ist. Mein Verdacht war, dass die freistehende Werbung (die von der Tastatur abgedeckt wird, so dass eine neue geladen wird) irgendwie verlegt wird.

+0

Tq. Dies hat das Problem des wiederholten Sendens von Anzeigenanfragen gelöst. Die Anzeigen konnten jedoch immer noch nicht in der Fußzeile und unter der Suchleiste geladen werden. – user2872856

+0

Hmm, haben Sie versucht, die Ansichtshierarchie zu debuggen, indem Sie die Schaltfläche "zwei Rechtecke (eine horizontale und eine vertikale) übereinander" verwenden (Sie finden sie in der unteren Leiste in Xcode, wenn sie zusammen mit einer Pause-Schaltfläche ausgeführt werden)) um zu sehen, ob du herausfinden kannst, was vor sich geht? –

Verwandte Themen