加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 当广告消失时,iAdSuite bug会留下空格

发布时间:2020-12-14 19:03:11 所属栏目:百科 来源:网络整理
导读:我正在尝试在我的应用程序中合并iAdSuite标签栏视图实现,我在套件和我的应用程序中看到了同样的问题.广告出现后,我的内容视图会正确调整大小并正确显示广告.当广告消失后,它会留下它所在的空白区域.但是,我已经确认我的内容视图确实调整回原来的高度,并将其
我正在尝试在我的应用程序中合并iAdSuite标签栏视图实现,我在套件和我的应用程序中看到了同样的问题.广告出现后,我的内容视图会正确调整大小并正确显示广告.当广告消失后,它会留下它所在的空白区域.但是,我已经确认我的内容视图确实调整回原来的高度,并将其缩小到原始边界.您无法看到广告所在的部分.我已经确保每个视图都有一个layoutIfNeeded,以及我能想到的其他所有内容都无济于事.有什么想法吗?

编辑:我已经弄清楚问题是什么.每次调用showBannerView:时,Apple的示例显然会将_bannerView添加到self.view,但永远不会删除视图.由于横幅视图在屏幕外移动,但仍然没有完全合理,但删除它确实解决了空白问题.我的解决方案如下,但如果有人有更优雅的方式,请告诉我.

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

解决方法

我有同样的问题.从hideBannerView委托方法中的超级视图中删除bannerview似乎已经解决了它.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读