我正在为博客网站构建应用程序。
我有一个带UITableViewController的UINavigationController,因为它的根视图。
我把它放在一个故事板中没问题,但是我试图将iAd视图拖到屏幕的底部,xcode不会让我添加它。
看起来我必须从UITableViewController的子类切换到UIViewController的子类,并将我的委托和数据源方法放在我的子类UIViewController中。
这对我来说似乎不对。我只想尝试UITableView的文章标题,顶部是导航栏,底部是iAd ...
么?建议?
提前致谢。
答案 0 :(得分:23)
实现此目的的最简单方法之一是使用UITableView
的{{1}}属性。是的,我知道页脚停留在桌子的底部,但它没有必要。您可以在表格中设置其框架。像这样添加iAd作为页脚:
tableFooterView
然后,要在表格滚动时调整iAd的框架,请实施self.tableView.tableFooterView = iAd;
委托方法:(这是可能的,因为UIScrollView
是UITableView
的子类)
UIScrollView
您可以看到实施很简单。我们只需使用-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGRect iAdFrame = iAd.frame;
CGFloat newOriginY = table.contentOffset.y + table.frame.size.height - iAdFrame.size.height;
CGRect newIAdFrame = CGRectMake(iAdFrame.origin.x, newOriginY, iAdFrame.size.width, iAdFrame.size.height);
iAd.frame = newIAdFrame;
}
contentOffset
来确定iAd框架下方的距离。
答案 1 :(得分:2)
我尝试使用NJones上面的示例来调整tableFooterView的位置,但我发现在重新加载数据或刷新表时很难管理它。
然后我发现可以通过将iAd横幅添加到tableViewController视图的 superview 来完成。
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];
}
答案 2 :(得分:0)
我不得不对NJones发布的解决方案进行一些更改,因为广告没有显示在所有其他单元格/视图之上。
首先确保你的tableViewController是AdBannerViewDelegate:
@interface MyTableViewController () <ADBannerViewDelegate>
将AdBanner添加到tableviewcontroller:
- (void)viewDidLoad {
[super viewDidLoad];
...
ADBannerView *adBanner = [[ADBannerView alloc]initWithAdType:ADAdTypeBanner];
adBanner.delegate = self;
self.tableView.tableFooterView = adBanner;
}
定位广告横幅的代码来自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];
}
}
只要视图要布局其子视图,就会调用此函数(因此您只需要在此处,无需检查滚动等):
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
[self positionAdBanner];
}
您还应该处理ADBannerViewDelegate方法:
-(void)bannerViewDidLoadAd:(ADBannerView *)banner
{
banner.hidden = NO;
[self positionAdBanner];
}
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
banner.hidden = YES;
}