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