views:

123

answers:

1

I want to be able to display an ADBannerView right above my UITabBar (which displays a UITableView). Unfortunately my banner is not positioning correctly. It will appear right below the UITableView, and then as soon as I scroll, the banner will remain in the middle of my UITableView.

I want the banner to appear right above the UITabBar, and allow the UITableView to scroll behind the banner when the user drags.

-(void)layoutForCurrentOrientation:(BOOL)animated
{
    CGFloat animationDuration = animated ? 0.2 : 0.0;
    // by default content consumes the entire view area
    CGRect contentFrame = self.view.bounds;
    // the banner still needs to be adjusted further, but this is a reasonable starting point
    // the y value will need to be adjusted by half the banner height to get the final position
    CGPoint bannerCenter = CGPointMake(CGRectGetMidX(contentFrame), CGRectGetMaxY(contentFrame));
    CGFloat bannerHeight = 0.0;

    // First, setup the banner's content size and adjustment based on the current orientation
    if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
    {
        banner.currentContentSizeIdentifier = ADBannerContentSizeIdentifier480x32;
        bannerHeight = 32.0;
    }
    else
    {
        banner.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
        bannerHeight = 50.0;
    }

    // Depending on if the banner has been loaded, we adjust the content frame and banner location
    // to accomodate the ad being on or off screen.
    // This layout is for an ad at the bottom of the view.
    if(banner.bannerLoaded)
    {
        contentFrame.size.height -= bannerHeight;
        bannerCenter.y -= bannerHeight / 2.0;
    }
    else
    {
        bannerCenter.y += bannerHeight / 2.0;
    }

    // And finally animate the changes, running layout for the content view if required.
    [UIView animateWithDuration:animationDuration
                     animations:^{
                         self.tableView.frame = contentFrame;
                         [self.tableView layoutIfNeeded];

                         banner.center = bannerCenter;
                     }];
}
A: 

You should be creating a view that holds your tableview and the banner ad as separate entities, rather than resorting to the hackery above. That is, create a new UIView that will be set to your view controllers 'view' property. In this view, put your banner ad just off screen (its y origin should be negative the height of the banner), and your tableview's origin should be 0,0. Once the banner loads successfully, animate the banner into origin 0,0 and also move the tableview's origin to 0,bannerHeight.

This will give you the effect you'll see in the WWDC10 video on iAds, which I recommend watching if you haven't already.

jer
i got this hackery from the iAdSuite on developer.apple.com :)
Sheehan Alam
Oh lord...I'd file a bug if I were so inclined.
jer