El error de iAdSuite deja espacio en blanco cuando el anuncio desaparece

Estoy tratando de incorporar la implementación de la vista de la barra de tabs de iAdSuite en mi aplicación y estoy viendo el mismo problema en la suite y en mi aplicación. Cuando aparece el anuncio, la vista de mi contenido cambia de tamaño correctamente y el anuncio aparece correctamente. Cuando el anuncio desaparece, deja espacio en blanco donde se ubicó. Sin embargo, he confirmado que mi vista de contenido vuelve a cambiar su tamaño a su altura original y se networkinguce a sus límites originales. Simplemente no puede ver la parte donde estaba el anuncio. Me he asegurado de que cada vista tenga un layoutIfNeeded y casi todo lo demás que se me ocurra en vano. ¿Alguna idea?

introduzca la descripción de la imagen aquí

Edit: He descubierto cuál es el problema. El ejemplo de Apple aparentemente agrega _bannerView a sí mismo. Se ve cada vez que se llama a showBannerView: se llama pero nunca se quita la vista. Eso todavía no tiene sentido porque la vista del banner se está moviendo fuera de la pantalla, pero eliminarlo soluciona el problema del espacio en blanco. Mi solución es la siguiente, pero si alguien tiene una forma más elegante, avíseme.

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

Yo tuve el mismo problema. Eliminar la bannerview de la super vista en el método delegado de hideBannerView parece haberlo solucionado.

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

Gracias por esta pregunta y respuesta, estaba tirando pelos con esta. Cambié el maldito código así y ahora la animation de ocultación funciona. Me pregunto por qué Apple publica el código de ejemplo de Buggy …

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