Проблема с размещением баннера поверх моего UITableView - PullRequest
3 голосов
/ 15 сентября 2010

Я хочу иметь возможность отображать ADBannerView прямо над моим UITabBar (который отображает UITableView).К сожалению, мой баннер неправильно позиционируется.Он появится прямо под UITableView, а затем, как только я прокручиваю, баннер останется в середине моего UITableView.

Я хочу, чтобы баннер появился прямо над UITabBar, и разрешитьUITableView для прокрутки за баннером, когда пользователь перетаскивает.

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

Ответы [ 2 ]

2 голосов
/ 31 января 2014

Я разобрался, как это сделать для обычного UITableViewController без использования кастомного UIViewController с UITableView внутри.Хитрость заключается в том, чтобы динамически регулировать положение вида баннера, чтобы он всегда находился внизу видимой области.

Вы только что добавили свой вид баннера в качестве подпредставления и соответственно изменили вставки таблицы:

- (void)viewDidLoad 
{
        [super viewDidLoad];

        ...

        //init banner and set it's frame (here we use 320x50 banner) 
        self.bannerView = [[UIView alloc] init];
        self.bannerView.frame = CGRectMake(0, self.view.frame.size.height - 50, 320, 50);

        //add as subview
        [self.view addSubview:self.bannerView];

        //set proper bottom inset depending on your banner height
        self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 50, 0);
}

Когда таблица прокручивается, вам нужно настроить положение баннера в зависимости от смещения содержимого:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //refresh banner frame during the scrolling
    CGRect bannerFrame = self.bannerView.frame;
    bannerFrame.origin.y = self.view.frame.size.height - 50 + self.tableView.contentOffset.y;
    self.bannerView.frame = bannerFrame;
}

Мой пример для баннера с нижним расположением, но легко изменить расчеты, чтобы применить его к баннеру, расположенному в верхней части таблицы.

0 голосов
/ 15 сентября 2010

Вы должны создавать представление, в котором вид таблицы и рекламный баннер хранятся как отдельные объекты, а не прибегать к хакерской атаке, описанной выше. То есть создайте новый UIView, который будет установлен в свойстве view для контроллеров представления. В этом представлении разместите рекламный баннер за пределами экрана (его источник у должен быть отрицательным по высоте баннера), а источник вашего табличного представления должен быть 0,0. После успешной загрузки баннера анимируйте баннер в исходную точку 0,0, а также переместите исходную точку табличного представления в 0, bannerHeight.

Это даст вам эффект, который вы увидите в видео WWDC10 на iAds, которое я рекомендую просмотреть, если вы еще этого не сделали.

...