Ios5 UINavigationController内UITableViewController下方的iAd

Ios5 UINavigationController内UITableViewController下方的iAd,ios5,uinavigationcontroller,uitableview,iad,Ios5,Uinavigationcontroller,Uitableview,Iad,我正在为一个博客网站构建一个应用程序 我有一个UINavigationController,它的根视图是UITableViewController 我在故事板中展示了这一点没问题,但我正试图将iAd视图拖到屏幕底部,xcode不允许我添加它 看起来我必须从UITableViewController的子类切换到UIViewController的子类,然后将委托和数据源方法放在子类UIViewController中 我觉得这是不对的。我只是想以文章标题的UITableView结束,顶部是导航栏,底部

我正在为一个博客网站构建一个应用程序

我有一个UINavigationController,它的根视图是UITableViewController

我在故事板中展示了这一点没问题,但我正试图将iAd视图拖到屏幕底部,xcode不允许我添加它

看起来我必须从UITableViewController的子类切换到UIViewController的子类,然后将委托和数据源方法放在子类UIViewController中

我觉得这是不对的。我只是想以文章标题的UITableView结束,顶部是导航栏,底部是iAd

建议?建议


提前感谢。

实现这一点的最简单方法之一是使用
UITableView
tableFooterView
属性。是的,我知道页脚在桌子的底部,但它不必。您可以在表中设置其框架。添加iAd作为页脚,如下所示:

self.tableView.tableFooterView = iAd; 
然后,要在表格滚动时调整iAd的框架,请实现
UIScrollView
委托方法:(这是可能的,因为
UITableView
UIScrollView
的子类)


您可以看到实现非常简单。我们只需使用
contentOffset
y
来确定iAd的框架应该向下多远。

我尝试使用NJones的上述示例来调整tableFooterView的位置,但我发现在重新加载数据或刷新表时很难管理它

然后我发现,这可以通过将iAd横幅添加到tableViewController视图的超级视图中来实现

self.bannerViewController = [[BannerViewController alloc] init];
[self.bannerViewController.view setHidden:YES];
[self.bannerViewController.view setFrame:CGRectMake(0, self.view.superview.frame.size.height - self.tabBarController.tabBar.frame.size.height - 50, 320, 50)];

[self.view.superview addSubview:self.bannerViewController.view];
[self.bannerViewController loadBanner];
加载横幅时,我创建一个tableFooterView,为tableViewController中的最后一个单元格腾出空间

-(void)bannerDidLoad{
     [self.bannerViewController.view setHidden:NO];
     self.tableView.tableFooterView = [[UIView alloc];
     initWithFrame:self.bannerViewController.view.frame];
 }

我不得不对NJones发布的解决方案进行一些更改,因为广告没有显示在所有其他单元格/视图的顶部存在问题

首先确保tableViewController是AdBannerViewDeleteGate:

@interface MyTableViewController () <ADBannerViewDelegate>
定位广告横幅的代码取自NJones,我只添加了最后一行,将广告横幅置于最前面:

-(void)positionAdBanner {
    ADBannerView *adBanner = (ADBannerView *) self.tableView.tableFooterView;
    if (adBanner) {
        CGRect iAdFrame = adBanner.frame;
        CGFloat newOriginY = self.tableView.contentOffset.y + self.tableView.frame.size.height - iAdFrame.size.height;
        CGRect newIAdFrame = CGRectMake(iAdFrame.origin.x, newOriginY, iAdFrame.size.width, iAdFrame.size.height);
        adBanner.frame = newIAdFrame;
        [self.tableView bringSubviewToFront:adBanner];
    }
}
每当视图要布局其子视图时,就会调用此函数(因此您只需要在此处使用它,无需检查滚动等):

您还应处理ADBannerViewDelegate方法:

-(void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    banner.hidden = NO;
    [self positionAdBanner];
}
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
    banner.hidden = YES;
}

这起作用了,谢谢。然而,作为记录,我最终只是使用了一个viewController和一个tableView,而不是使用tableViewController,所以我没有问题调整tableView的大小并将iAd放在下面。我不知道如何在我的应用程序中使用这段代码。我已经在我的表视图的表视图页脚中拖拽了横幅视图,但我不确定从那里走到哪里。。这个变量
iAd
分配到哪里?我明白了,我刚刚以编程方式初始化了一个新的
AdBannerView
。Thnx NJones!这对我有用!我也尝试过这个在viewDidAppear中的方法,所以你不必滚动来显示广告,它在那里工作,我意识到这个线程有点旧,但只是想更新。。。我无法在iOS6上完全实现这一点。如果我只是在表的页脚中使用它,那么页脚的高度将是关闭的,尽管对齐有时似乎有效。一旦我通过table:heightForFooter委托设置了高度,这似乎根本不起作用。
-(void)positionAdBanner {
    ADBannerView *adBanner = (ADBannerView *) self.tableView.tableFooterView;
    if (adBanner) {
        CGRect iAdFrame = adBanner.frame;
        CGFloat newOriginY = self.tableView.contentOffset.y + self.tableView.frame.size.height - iAdFrame.size.height;
        CGRect newIAdFrame = CGRectMake(iAdFrame.origin.x, newOriginY, iAdFrame.size.width, iAdFrame.size.height);
        adBanner.frame = newIAdFrame;
        [self.tableView bringSubviewToFront:adBanner];
    }
}
-(void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];
    [self positionAdBanner];
}
-(void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    banner.hidden = NO;
    [self positionAdBanner];
}
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
    banner.hidden = YES;
}