2012-10-08 2 views
5

Ich versuche, die iAdSuite Tab Bar View-Implementierung in meiner App zu integrieren, und ich sehe das gleiche Problem in der Suite und in meiner App. Wenn die Anzeige erscheint, wird die Ansicht meines Inhalts korrekt angepasst und die Anzeige wird korrekt angezeigt. Wenn die Anzeige dann verschwindet, bleibt Leerraum an der Stelle, an der sie sich befand. Ich habe jedoch bestätigt, dass meine Inhaltsansicht auf ihre ursprüngliche Höhe zurückgesetzt wird und auf ihre ursprünglichen Grenzen heruntergezogen wird. Sie können den Teil, wo die Anzeige war, nicht sehen. Ich habe dafür gesorgt, dass jede Ansicht ein Layout bekommt und alles, was mir sonst noch einfällt. Irgendwelche Gedanken?iAdSuite Bug lässt Leerraum, wenn die Anzeige verschwindet

enter image description here

Edit: Ich habe herausgefunden, was das Problem ist. Apples Beispiel fügt _bannerView anscheinend jedesmal zu self.view hinzu showBannerView: wird aufgerufen, entfernt aber nie die Ansicht. Das macht immer noch keinen Sinn, da die Banneransicht vom Bildschirm wegbewegt wird, aber durch das Entfernen wird das Weißraumproblem gelöst. Meine Lösung ist wie folgt, aber wenn jemand einen eleganteren Weg hat, lassen Sie es mich wissen.

- (void)layoutAnimated:(BOOL)animated { 

    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) { 
     _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait; 
    } else { 
     _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape; 
    } 

    CGRect contentFrame = self.view.bounds; 
    contentFrame.origin = CGPointMake(0.0, 0.0); 
    CGRect bannerFrame = _bannerView.frame; 
    if (_bannerView.bannerLoaded) { 
     contentFrame.size.height -= _bannerView.frame.size.height; 
     bannerFrame.origin.y = contentFrame.size.height; 
    } else { 
     bannerFrame.origin.y = contentFrame.size.height; 
    } 

    [UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{ 
     _contentView.frame = contentFrame; 
     [_contentView layoutIfNeeded]; 
     _bannerView.frame = bannerFrame; 
    } 
        completion:^(BOOL finished) { 
         if (!_bannerView.bannerLoaded) { 
          [_bannerView removeFromSuperview]; 
          _bannerView=nil; 
         } 
        }]; 
} 

- (void)showBannerView:(ADBannerView *)bannerView animated:(BOOL)animated 
{ 
    _bannerView = bannerView; 
    if (![self.view.subviews containsObject:_bannerView]) 
     [self.view addSubview:_bannerView]; 
    [self layoutAnimated:animated]; 
} 

- (void)hideBannerView:(ADBannerView *)bannerView animated:(BOOL)animated 
{ 
    [self layoutAnimated:animated]; 
} 

Antwort

0

Ich hatte das gleiche Problem. Das Entfernen der Banneransicht aus der Super-View in der hideBannerView-Delegate-Methode scheint es gelöst zu haben.

- (void)hideBannerView:(ADBannerView *)bannerView animated:(BOOL)animated 
{ 
    [self layoutAnimated:animated]; 
    [_bannerView removeFromSuperview]; 
    _bannerView = nil; 
} 
0

Danke für diese Frage und Antwort, ich zog Haare mit diesem. Ich habe den verdammten Code so geändert und nun funktioniert die versteckte Animation. Ich frage mich, warum Apple Buggy Beispielcode veröffentlicht ...

- (void)layoutAnimated:(BOOL)animated hide:(BOOL)hide 
{ 
    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) { 
     _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait; 
    } else { 
     _bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierLandscape; 
    } 

    CGRect contentFrame = self.view.bounds; 


    CGRect bannerFrame = _bannerView.frame; 
    if (!hide) { 
     contentFrame.size.height -= _bannerView.frame.size.height; 
     bannerFrame.origin.y = contentFrame.size.height; 
    } else { 
     contentFrame.size.height += _bannerView.frame.size.height; 
     bannerFrame.origin.y = contentFrame.size.height; 
    } 

    [UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{ 
     _contentView.frame = contentFrame; 
     [_contentView layoutIfNeeded]; 
     _bannerView.frame = bannerFrame; 
    } completion:^(BOOL finished) { 
     if (hide) { 
      [_bannerView removeFromSuperview]; 
      _bannerView=nil; 
     } 
    }]; 
} 

- (void)showBannerView:(ADBannerView *)bannerView animated:(BOOL)animated 
{ 
    _bannerView = bannerView; 
    [self.view addSubview:_bannerView]; 
    [self layoutAnimated:animated hide:NO]; 
} 

- (void)hideBannerView:(ADBannerView *)bannerView animated:(BOOL)animated 
{ 
    [self layoutAnimated:animated hide:YES]; 

} 
Verwandte Themen