我刚刚在我的应用程序中添加了ADBannerview。我在UIApplicationDelegate中创建AdBannerView,以仅拥有一个实例,并在其他viewController中共享它

除非我收到警告消息,否则一切都正常运行:ADBannerView:警告横幅视图(0x9c75550)带有广告,但可能被遮盖了。在每个横幅视图中,此消息仅打印一次。

当我在当前显示ADBannerview的视图顶部打开模式视图(使用presentModalViewController)时。在打开模式视图之前,我使用以下代码隐藏ADBannerview:

- (void)viewWillDisappear:(BOOL)animated
{
    ADBannerView *bannerView = [ (ScoreBoardAppDelegate*)[[UIApplication sharedApplication] delegate] adBanner];
    [self hideBanner:bannerView];
    [super viewWillDisappear:animated];
}

- (void)hideBanner:(ADBannerView*) adBanner {
    NSLog(@"%s called", __FUNCTION__);

    // Grow the tableview to occupy space left by banner, it's the size of the parent view
    CGFloat fullViewHeight = self.tbView.frame.size.height;
    CGRect tableFrame = self.tv.frame;
    tableFrame.size.height = fullViewHeight;

    // Move the banner view offscreen
    CGRect bannerFrame = adBanner.frame;

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    bannerFrame.origin = CGPointMake(CGRectGetMinX(screenBounds), CGRectGetMaxY(screenBounds));

    self.tv.frame = tableFrame;
    adBanner.frame = bannerFrame;
}


我不知道该怎么办才能没有此警告消息。在显示“模态”视图之前,似乎已成功隐藏(离屏)了ADBannerView。

我可能错过了一些东西,但看不到。
谢谢你的帮助,

塞巴斯蒂安。

最佳答案

塞巴斯蒂安,我希望你能继续这样做,因为这个问题已经有很多个月没有得到回答了。我最近添加了iAd支持,并发现此警告也很烦人。共享广告横幅的微妙之处之一是,如果要在初始视图控制器中显示它,则必须在该视图控制器中而不是在应用程序委托中进行大多数设置。

这是我的初始视图控制器中的viewWillAppear:方法:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    if (!SharedAdBannerView) {
        // in my app, the ad banner is the bottom-most thing on screen
        CGRect startingFrame = CGRectMake(0.0, self.view.frame.origin.y + self.view.frame.size.height, 320.0, 50.0);
        adBanner = [[ADBannerView alloc] initWithFrame:startingFrame];

        // Set the autoresizing mask so that the banner is pinned to the bottom
        adBanner.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;

        // Since we support all orientations, support portrait and landscape content sizes.
        // If you only supported landscape or portrait, you could remove the other from this set
        adBanner.requiredContentSizeIdentifiers = [NSSet setWithObjects:ADBannerContentSizeIdentifierPortrait, nil];
        adBanner.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;

        adBanner.delegate = self;
        [self.view addSubview:adBanner];
        SharedAdBannerView = adBanner;
    } else {
        adBanner = SharedAdBannerView;
}


SharedAdBannerView是TN2286中定义的宏,它利用了在应用程序委托上定义的实例变量(这是在显示iAd的所有视图之间保持共享的方式)。我还决定对广告横幅进行动画处理,然后将其从视图层次结构中移除,因为一个场景正与另一个场景隔离。我阅读文档时说的是,每当广告横幅是视图层次结构的一部分时,您都会收到该消息-换句话说,隐藏横幅视图并不是防止警告消息的方法。或换句话说,如果隐藏广告横幅就足够了,那么它对我不起作用,也无助于故障排除。当我遇到TN2239时,我学到了很多东西,它在gdb中提供了这个技巧:

 po [[self view] recursiveDescription];


您必须根据放置断点的位置来调整向其发送recursiveDescription消息的对象,但是[self view]可能很好。

关于ios - 我隐藏了我的AdBannerView,但仍然收到警告横幅 View (0x9c75550)包含广告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7960866/

10-13 02:50