广告横幅阻止UITableView的底部

时间:2014-01-10 18:12:52

标签: objective-c iad

这是一个UI布局问题。我需要在iPhone应用中的所有视图底部放置横幅广告。横幅广告是共享的,只有在可用时才会加载。

两个UIViewControllers包含占据全屏的UITableViews。我有两个相关的问题,我不知道如何解决。加载横幅广告时,它会隐藏表格视图的底部,阻止用户选择最后几个单元格中的任何一个。此外,右侧索引不再居中,并且低于应有的值。

显然,如果在广告未加载的情况下有空白空格,Apple会拒绝某个应用(如果我错了,请更正我),因此需要将表格视图全长没有广告可用。

有人解决了这个问题吗?什么可能是克服这个问题的最佳做法?谢谢!

3 个答案:

答案 0 :(得分:13)

我想出了如何在不使用内置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;
}

答案 1 :(得分:3)

经过一番研究后,我发现了如何解决这个问题。

在初始化表格视图后加载广告横幅时,它可以覆盖表格视图的底部,使这些隐藏的单元格无法选择。用户可以将视图向上滚动到足以看到它们,但是当释放滚动时,表视图会弹回原始视图,并且无法选择那些最底部的单元格。为了解决这个问题,我做了以下几点:

CGFloat padding = self.view.frame.size.height - (self.view.frame.size.height - (SharedAdBannerView.frame.size.height + self.toolbar.frame.size.height + 20));

UIEdgeInsets bottomPadding = UIEdgeInsetsMake(0, 0, padding, 0);
[self.riversTableView setContentInset:bottomPadding];
[self.riversTableView setScrollIndicatorInsets:bottomPadding];

答案 2 :(得分:1)

如果您希望在表格视图旁边有其他视图,则无法使用UITableViewController。在UITableViewController超类view的{​​{1}}属性是表视图,因此它默认占据整个屏幕。

此处的方法是使用普通UIViewController,并将表格视图和横幅视图添加为子视图。使用storyboard的自动布局功能根据您设置的约束确定精确的几何图形。当横幅为空时,表格视图可以自动展开。

通过声明控制器类符合UIViewControllerUITableViewDataSource协议并将类设置为表视图的委托,可以使表视图工作。